在nginx上清理URL和php扩展


Clean URLs and php extension on nginx

我在网上查看了数十个其他问题和参考资料 - 根据我所有的计算,我的设置应该可以工作,但它没有。

我有 nginx 安装程序与 php-fpm。 如果我尝试访问.php文件,它会正常运行并得到正确的结果。 我在我的配置文件中得到了这个:

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

现在,我想设置我的 Web 应用程序,以便/somedir/file自动执行/somdir/file.php,同时仍然在浏览器的地址栏中显示/somdir/file。 所以我修改了我的配置以包含以下内容:

location / {
    try_files $uri $uri/ $uri.php?query_string
}

这种工作,即服务器确实访问.php文件。 然而,它不是使用上面现有的location ~ '.php$块来执行它,而是简单地将 php 源代码作为下载到浏览器中。 如果我手动将.php附加到请求的 URL,则会执行 php。

感觉好像一旦服务器匹配try_files $uri.php,它就不会在位置进行另一次传递以查看它需要对 php 文件做什么。 我尝试将 php 块放在location /的上方和下方,但这没有区别。

如何执行 php?

您希望将file.php视为索引文件,以便domain.com/dir/file.php domain.com/dir/工作?

为什么不直接将其重命名为索引.php?

您可以通过在位置块上添加此参数来执行此操作:

index              index.html file.php index.php;

如果没有,您可能需要考虑为 nginx 编写重写规则以将domain.com/dir/映射到domain.com/dir/file.php(但您必须为需要它工作的每个目录执行此操作)