我在网上查看了数十个其他问题和参考资料 - 根据我所有的计算,我的设置应该可以工作,但它没有。
我有 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
(但您必须为需要它工作的每个目录执行此操作)