匹配来自原始路径的重定向 nginx 请求

匹配来自原始路径的重定向 nginx 请求

我当前的配置将所有 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;
}

问题是,这意味着我丢失了有关原始基本路径的信息,并且无法再匹配原始位置,例如:

  1. 要求/civicrm/group?reset=1
  2. 匹配位置/some/path,这是我想更改设置的地方php-fpm
  3. 我需要更改 URI,因此我重写为 /index.php?$query_string
  4. 现在,我从头开始匹配,但现在位置 /some/path?reset=1不匹配(问题)
  5. 所以我匹配常规的 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术语已被移动,因此它不再是最后一个参数,也不再包含查询字符串。请参阅这个文件了解详情。

相关内容