2012-04-12 175 views
2

我有一個網站,我需要從Apache服務器移動到Nginx服務器。Nginx重寫規則/ try_files不能一起工作

本網站的.htaccess文件如下:

RewriteEngine on 
RewriteRule ^([^/\.]+)/?$ $1.php [L] 

這重定向到www.example.com/hello保持www.example.com/hello.php原始鏈接,但omiting帶.php從網址的末尾開始。

我想在我的Nginx服務器塊複製這個..

location/{ 
# Check if a file exists, or route it to index.php. 
     try_files $uri $uri/ /index.php; 
} 

rewrite ^/([a-z]+)$ /$1.php last; 

重寫規則運作,所有重定向鏈接到PHP文件,但打破了Nginx的try_files規則,如果一個目錄內搜索文件不存在。

下面的管理示例鏈接是一個其中包含index.php文件的文件夾。

www.example.com/admin

的try_files應該重定向這..

www.example.com/admin/

由於沒有叫admin.php的文件。相反,我得到'沒有指定輸入文件'的消息。

當我刪除重寫,try_files工作正常。但是,如果沒有這個重寫規則,網站的其他部分就無法工作。

有誰知道我怎麼能得到try_files和重寫一起工作?

感謝

回答

0

我知道這可能沒有幫助,但我看您的使用情況下,我不得不懷疑你是怎麼知道的/管理員的請求應該去/管理/和不是/admin.php?

我的意思是你重寫規則中明確規定,如果您收到/ [AZ]的請求+,那麼它應該被改寫成/[az]+.php

然而,你想一個try_files推/管理員/ admin /取而代之?

看着你的Apache規則:

RewriteRule ^([^/\.]+)/?$ $1.php [L] 

我在這裏看到你想限制什麼被髮送到x.php。在你的nginx重寫中我沒有看到任何這樣的限制。