2016-03-19 89 views
1

我真的沒有找到任何文檔,我發現有關URL重寫的明確信息(我無法理解它,因爲我意外地發現文檔非常難以讀取非本地文檔)。根據位置不同url重寫

我正在尋找一種方式來重寫匹配/*\.(js|png|jpg|css|ttf|xml)$/path/media/所有路線,並嘗試文件的所有腦幹那麼如果存在返回它,否則404 not found

那麼如果它與/ajax/開始重定向這一切對path/ajax/index.php 否則將其全部朝向path/www/index.php

我不太明白我應該怎麼做,現在我創建了3個位置/ media /,/ ajax /和/ www /但我不知道它是否是正確的方式來使用重寫,而不是返回,或者是位置正確的方式來做到這一點。

我真的不明白我在我的sites-enabled/file中寫過關於fastcgi的內容。這是一條詮釋者的道路嗎?

location ~ \.php$ { 
    try_files $uri =404; 
    fastcgi_split_path_info ^(.+\.php)(/.+)$; 
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    include fastcgi_params; 
} 

如果我說得對,它的意思是「如果它以.php結尾,它存在於層次結構中,然後執行它」。

我不知道是否應該爲每個必須處理php(/ www /和/ ajax /)的位置放置這種東西,特別是因爲我要爲兩者都做一些路由。而且,我不知道是否應該這樣做。

回答

1

最簡單的PHP配置使用由所述位置塊繼承一個共同root指令,並在您的情況下將是:

root path; 

這意味着/www/index.php/ajax/index.php都由location ~ \.php$塊處理。

默認的操作可以通過try_files指令中location /塊內定義:

location/{ 
    try_files $uri $uri/ /www/index.php; 
} 

如果您需要與/ajax開頭的URI不同的默認操作,添加更具體的地點:

location /ajax { 
    try_files $uri $uri/ /ajax/index.php; 
} 

如果您不希望媒體URI以/media開頭,則可以覆蓋某個特定位置的root

location ~* \.(js|png|jpg|css|ttf|xml)$ { 
    root path/media; 
} 

在您的具體情況下,fastcgi_split_path_infofastcgi_index指令是不必要的。該include fastcgi_params;聲明應任何fastcgi_param指令之前被放置,以避免後者被意外覆蓋:

location ~ \.php$ { 
    try_files $uri =404; 
    include fastcgi_params; 
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
} 

nginx documentation瞭解詳情。