【问题标题】:Clean URLs and php extension on nginx清理 nginx 上的 URL 和 php 扩展
【发布时间】:2016-02-18 16:26:45
【问题描述】:

我在网上查看了许多其他问题和参考资料 - 根据我的所有计算,我的设置应该有效,但它没有。

我用 php-fpm 安装了 nginx。如果我尝试访问 .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被执行?

【问题讨论】:

  • 嗯,它应该工作。显示完整的服务器块
  • 您缺少尾随 ;。这只是问题中的错字吗?

标签: php nginx clean-urls nginx-location


【解决方案1】:

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

为什么不把它重命名为 index.php?

你可以通过在你的位置块上添加这个参数来做到这一点:

index              index.html file.php index.php;

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

【讨论】:

    猜你喜欢
    • 2021-01-22
    • 2016-07-22
    • 1970-01-01
    • 2016-03-06
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    相关资源
    最近更新 更多