2016-05-14 61 views
0

nginx的,我想隨意添加php文件到我的文檔根目錄下,並讓他們不帶擴展名只是工作。不僅如此,我還希望這些隨機.php文件在它們之後也採用path_info。Nginx的:隱藏擴展名.php而是採取PATH_INFO

所以,如果我添加一個文件/path/to/root/apple.php我想www.example.com/apple工作,以及www.example.com/apple/123www.example.com/apple/123/somethingwww.example.com/apple/123/something/something

我希望能夠添加文件這樣所有的時間,所有的地方,而無需在Nginx的配置中添加明確的定位塊爲他們每個人。我想繼續添加/path/to/root/orange.php/path/to/root/quince.php以及其他任何內容,並且我希望這些路徑能夠立即工作,不需要.php擴展名以及任何任意path_info。

在Apache中,我可以做Options MultiViews。在Nginx中,也許這還不可能,但如果是這樣,我只想知道這一點,所以我可以停止嘗試弄清楚它。

回答

1

一個常見的模式是尋找靜態文件,如果沒有找到執行一些默認操作。該默認操作可能是提取URI的第一個元素並將其變爲.php。我做了一個假設,那就是www.example.com/apple/123/something/something,PHP文件始終是路徑的第一個元素,在這種情況下爲apple.php

root /path/to/root; 

location/{ 
    try_files $uri $uri/ @php; 
} 

location ~ \.php$ { 
    try_files $uri =404; 
    ... 
} 

location @php { 
    rewrite ^/([^/]+)(/|$) /$1.php last; 
} 

我還沒有解決路徑信息問題。 PHP腳本可以通過多種方式訪問​​路徑信息。有些人會看到原來的REQUEST_URI,在這種情況下,你只需要做以上的事情。

+0

謝謝。是的,我在想那樣的事情。當我做path_info時,我幾乎總是隻做一段。像/widgets(.php)/123,不是/widgets(.php)/something/123。如果我需要的話,我會做/widgets/something(.php)/123。文件夾和文件名大致對應於數據庫模式,並且粗略地說,path_info是特定行中的查找鍵。所以也許一個Location塊嘗試使用$ uri.php,而另一個使用rewrite表達式來嘗試/path/to/some.php/with_one_segment_of_path_info。 –

+0

很顯然,重寫可以用來在最後一個'/'之前放置'.php',但這意味着'www.example.com/apple'會變成一個特例。 –