2016-08-02 78 views
1

我的Nginx配置文件中的try_files指令似乎只適用於特定情況。以下是我的工作:Nginx的try_files不適用於以.php結尾的網址

location/{ 
      try_files $uri $uri/ /route.php?_route_url=$uri; 
    } 

如果我瀏覽到正確/admin/popups/image.php它加載,因爲這是現有文件 - (我相信這是在try_files語句中的第一個參數打)。如果我轉到/ admin/webpages /它正確加載 - 這將是第三個參數 -/admin/webpages /不存在,route.php將在/modules/webpages/admin/index.php文件中提取。當我進入/admin/webpages/edit.php時,我得到了一個404.在我看來,它應該會在try_files中的第三個參數中工作。如果我導航到/route.php?_route_url=/admin/webpages/edit.php它工作正常。

我一直在這一點上敲我的頭,我無法弄清楚。我確定這很簡單,但我看不到它。謝謝。

UPDATE: 經進一步調查,似乎這個塊沒有反映在上面的try_files應該發生的變化:

location ~ \.php$ { 
    fastcgi_split_path_info ^(.+\.php)(/.+)$; 
    fastcgi_pass unix:/run/php/php7.0-fpm.sock; 
    fastcgi_index index.php; 
    include fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    fastcgi_intercept_errors off; 
    fastcgi_buffer_size 16k; 
    fastcgi_buffers 4 16k; 
    fastcgi_connect_timeout 300; 
    fastcgi_send_timeout 300; 
    fastcgi_read_timeout 300; 
} 

不知道這會幫助你。我猜我需要在這個之前讓原始模塊生效。由於

回答

0

試試這一個,但要確保你添加服務器{}之間的一個

location/{ 
    try_files $uri $uri/ /route.php?_route_url=$args;  
} 

不要忘記重啓nginx的服務

+0

我已經完成了多次。謝謝。 – user2532598

0

我找到了答案,以我的問題,加入此行重寫

rewrite ^/admin/((?!popups).)*/([a-zA-Z0-9_-]+\.php?)$ /route.php?_route_url=$uri&$args last;

值得慶幸的是我只/管理/內一個實際的目錄。