Apache-2.2

使用try_files時Nginx不解析php

  • April 30, 2013

我基本上是在嘗試實現 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;解決了問題

引用自:https://serverfault.com/questions/502946