gpt4 book ai didi

php - 没有 .php 扩展名的 nginx + php-fpm

转载 作者:可可西里 更新时间:2023-11-01 01:01:09 26 4
gpt4 key购买 nike

这在 SO 上出现过几次,但没有一个解决方案有效。这是我目前拥有的:

    location / {
try_files $uri $uri/ $uri.php;
}

location @php {
default_type application/x-httpd-php;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param QUERY_STRING $args;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}

location ~ \.php$ {
#fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param QUERY_STRING $args;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}

这个例子包含两个选项。首先,第一个节被编写为通过最终位置节推送 URL/foo.php 和 URL/foo。如果我用 @php 替换第一节 try_files 中的 $uri.php,那么它应该使用 @php URL/foo 的位置。

对于 @php 位置,我尝试将 SCRIPT_FILENAME 设置为:

     fastcgi_param SCRIPT_FILENAME "/usr/share/nginx/html$uri.php";
fastcgi_param SCRIPT_FILENAME "$request_filename.php";

这些都不起作用。

在调试时,add_header 行从未为 URL/foo 发出任何内容。 Content-Type 始终设置为 application/octet-stream,有趣的是,它总是设法发回 php 文件的内容(已下载)。

我显然做错了什么,但我没有看到什么。

最佳答案

叹息。我知道如果我问这个,我会弄明白的。好的,开始吧,这就是解决方案:

    location / {
try_files $uri $uri/ @php;
}

location @php {
fastcgi_param SCRIPT_FILENAME "$document_root$uri.php";
fastcgi_param PATH_TRANSLATED "$document_root$uri.php";
fastcgi_param QUERY_STRING $args;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}

location ~ \.php$ {
#fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}

我在这里缺少的关键是 fastcgi_param PATH_TRANSLATED "$document_root$uri.php"; 行。在这个问题中,我描述了一个场景,其中所有 php 请求都经过最后一个节——这将避免对中间节的需要。那没有用,需要 @php 位置。

另外请注意,我切换到了 $document_root。许多讨论此问题的问题使用文档根而不是变量来表示文档根。也许它在旧版本的 nginx 中不存在(我使用的是 1.4.6),但这是一种更好的方法。

关于php - 没有 .php 扩展名的 nginx + php-fpm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25896063/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com