使用 try_files 时 Nginx 不解析 php

使用 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/functiontry_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;
  }
}

答案1

看来我只是误解了 try_files 的工作方式;它=404不是必需的,并且导致 nginx 在匹配后不将文件解析为 php。删除它,这样该行就try_files $uri $uri/ $uri.php;解决了这个问题

相关内容