Apache-2.2
使用try_files時Nginx不解析php
我基本上是在嘗試實現 Apache MultiViews 行為,以便我的 URL 不需要 .php 副檔名。
據我從 Server Fault 上回答的其他問題中可以看出,我應該對這個問題進行排序,但是我的 nginx 配置中顯然有問題。
行為幾乎是正確的;
- 我可以瀏覽
/path/to/app/
並正確解析 index.php 文件- 我可以瀏覽
/path/to/app/function.php
並正確解析文件- 我可以瀏覽
/path/to/app/media/some.jpg
並作為靜態內容提供- 如果我瀏覽到
/path/that/doesnt/exist
我會按預期得到 404但是,如果我瀏覽到
/path/to/function
指令try_files
正確匹配它,function.php
但將其作為靜態文件下載。這是配置文件:
server { listen 80; server_name app; root /path/to/app; index index.php index.html index.htm; access_log /var/log/nginx/access.log; location / { allow all; try_files $uri $uri/ $uri.php =404; } location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; } location ~ /\.ht { deny all; } }
看起來我只是誤解了 try_files 的工作方式;這
=404
不是必需的,並且導致 nginx 在匹配後不會將文件解析為 php。刪除它以便該行剛剛try_files $uri $uri/ $uri.php;
解決了問題