2013-03-01 96 views
4

我從遷移我的Apache服務器Nginx的和有一個非常簡單的.htaccess規則:路由請求nginx的

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^index.php [QSA,L] 

它背後的想法是引導每個請求的前端控制器( index.php)。我正在嘗試與Nginx一樣。我用了一個在線轉換器,使這個Nginx的位置塊:

location/{ 
    if (!-e $request_filename){ 
     rewrite ^(.*)$ /index.php break; 
    } 
} 

,但是當我把它添加到我的網站的配置的Nginx剛剛吐出來的是PHP文件下載的源代碼。作爲參考,這裏是整個配置文件:

http://pastebin.com/tyKtM1iB

我知道PHP的作品,彷彿我<?php phpinfo();取出位置塊,使文件能夠正常工作。

任何幫助,將不勝感激。

回答

11

這是怎麼了我的路線一切index.php文件,包括子目錄的請求,HTTP ARGS,等。

location/{ 
    try_files $uri $uri/ /index.php?$args; #if doesn't exist, send it to index.php 
} 

location ~ \.php$ { 
    include fastcgi_params; 
    fastcgi_intercept_errors on; 
    # By all means use a different server for the fcgi processes if you need to 
    fastcgi_pass 127.0.0.1:9000; 
} 

因此,例如,這些被髮送到index.php文件:

http://foo.bar/something/ 
http://foo.bar/something/?something=1 

雖然這些直接進入文件

http://foo.bar/someotherphp.php 
http://foo.bar/assets/someimg.jpg 
+2

這corse允許任何現有的文件,如圖像或其他php文件返回...它將任何請求都處理到index.php。 – Applehat 2013-03-01 20:52:18

+0

謝謝,'try_files $ uri $ uri//index.php?$ args;'是一種享受! – 2013-03-01 22:05:28

+0

用於使用try_files而不是if – mopsyd 2013-07-28 01:13:29

1

正則表達式的跳轉結束:

location/{ 
     index index.html index.php; 
     if (!-e $request_filename) { 
      rewrite ^.* /index.php break; 
      fastcgi_pass 127.0.0.1:9001; 
     } 
} 
+0

不能完全確定什麼是怎麼回事。我改變了我的正則表達式來匹配這個答案,但是nginx仍然會拋出PHP的源代碼。爲什麼在該位置塊中的fastcgi_pass?不應該在'〜\ .php $'下面嗎? – 2013-03-01 20:43:41

+0

這是從我的配置,我們有不同的規則,每個位置。奇怪。 – 2013-03-01 20:47:31

+0

對於Nginx,我並不是一個真正的專家,所以你的猜測和我的一樣好。 :p – 2013-03-01 20:48:30