gpt4 book ai didi

php - 在 nginx 中对 .php 扩展使用重写和 php-fpm

转载 作者:搜寻专家 更新时间:2023-10-31 21:25:33 25 4
gpt4 key购买 nike

我正在尝试从 Apache + mod_php 迁移到 Nginx + PHP-FPM。我目前正在使用 mod_rewrite 将一些以 .php 结尾的虚拟 URI 重写为实际的 PHP 脚本。这在使用 mod_php 时非常有效。但是对于 Nginx + FPM,因为我们必须使用 proxy_pass,所以这是行不通的。当我添加正则表达式位置 block 以匹配 .php 扩展名时,它获得最高优先级,并且我的重写规则未应用。

我该如何解决?

location /test/ {
rewrite "^/test/([a-z]+).php$" test.php?q=$1 last;
}

location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;

set $fastcgi_script_name_custom $fastcgi_script_name;
if (!-f $document_root$fastcgi_script_name) {
set $fastcgi_script_name_custom "/cms/index.php";
}

fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}

最佳答案

您可以将 rewrite 规则放在 location block 的上方,在 server block 的上下文中。或者您可以将 rewrite 规则放在与 URI 匹配的 location block 中。

所以你可以使用这个:

rewrite "^/test/([a-z]+).php$" /test.php?q=$1 last;

location / { ... }

location ~ [^/]\.php(/|$) { ... }

或者这个:

location / { ... }

location ~ [^/]\.php(/|$) {
rewrite "^/test/([a-z]+).php$" /test.php?q=$1 break;
...
}

请注意,重写后的 URI 需要一个前导 /(与 Apache 约定不同)。

参见 this document了解详情。

关于php - 在 nginx 中对 .php 扩展使用重写和 php-fpm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37030801/

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