我当前的配置将所有 php 页面重写为/index.php?$query_string
,我需要它来适用于特定路径,但是当为此使用位置块时,一旦路径被重写,它就不再匹配。有没有办法将请求转发到 fpm 并在同一位置块中重写 URI 而无需重定向?或者有其他可以实现我想要的替代方案?
这是我的具体代码:
location /civicrm/group {
location ~ \.php$ {
fastcgi_send_timeout 0;
fastcgi_read_timeout 0;
include snippets/fastcgi-common.conf;
fastcgi_param HTTPS 'on';
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}
try_files $uri @drupal;
}
location ~ \.php$ {
include snippets/fastcgi-modify.conf;
include snippets/fastcgi-common.conf;
fastcgi_param HTTPS 'on';
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}
location @drupal {
try_files $uri /index.php?$query_string;
}
问题是,这意味着我丢失了有关原始基本路径的信息,并且无法再匹配原始位置,例如:
- 要求
/civicrm/group?reset=1
- 匹配位置
/some/path
,这是我想更改设置的地方php-fpm
。 - 我需要更改 URI,因此我重写为
/index.php?$query_string
- 现在,我从头开始匹配,但现在位置
/some/path?reset=1
不匹配(问题) - 所以我匹配常规的 php 位置块。
答案1
如果此路径下没有静态文件,您可以将所有请求直接发送到index.php
:
location /civicrm/group {
try_files /index.php =404;
fastcgi_send_timeout 0;
fastcgi_read_timeout 0;
include snippets/fastcgi-common.conf;
fastcgi_param HTTPS 'on';
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}
请注意,/index.php
术语已被移动,因此它不再是最后一个参数,也不再包含查询字符串。请参阅这个文件了解详情。