Назад | Перейти на главную страницу

Сопоставление перенаправленных запросов 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.

Если по этому пути нет статических файлов, вы можете отправлять все запросы напрямую в 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 Термин был перемещен, поэтому он больше не является последним параметром и больше не содержит строку запроса. Видеть этот документ для подробностей.