nginx переписать в зависимости от местоположения переменной регулярного выражения - PullRequest
0 голосов
/ 29 апреля 2020

Я перемещаю существующий веб-сайт и перехожу из Litespeed (Apache .htaccess) в Nginx, и у меня возникают проблемы с преобразованием конкретного переписанного регулярного выражения, критически важного для функциональности сайта. Предыдущий .htaccess переписывает просто взять любое / слово, ранее не соответствующее определенному правилу c, и преобразовать его в параметр в индексе. php.

Пример предыдущих правил .htaccess:

RewriteRule ^report$ index.php?page=report&%{QUERY_STRING}
RewriteRule ^([a-zA-Z0-9\-\_]+)$ index.php?page=browser&region=$1
RewriteRule ^([a-zA-Z0-9\-\_]+)/([0-9{4}]+)/([a-zA-Z0-9\-\_]+)$ index.php?page=program&region=$1&program=$3&year=$2&%{QUERY_STRING}

Таким образом, если бы / report был URL-адресом, он загрузил бы страницу отчета, иначе, если бы он был / arizona, тогда он загрузил бы страницу браузера с region = arizona и т. Д.

Мой текущий nginx правила размещения

        location /report {
            rewrite (?i)^/report$ /index.php?page=report&$query_string last;
        }

        location ^/([a-z0-9\-\_]+)$ {
            rewrite (?i)^/([a-z0-9\-\_]+)$ /index.php?page=browser&region=$1 last;
        }

        location / {
                try_files $uri $uri/ =404;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        }

И домашняя страница (ничего в URL), и / report работают нормально. Кроме того, если я вручную добавлю /index.php?page=browser®ion=arizona, то он также будет работать нормально.

Однако ввод / arizona приводит к загрузке индекса, а не к обработке php -fpm. Я перепробовал все виды поиска и предложений по регулярному выражению, в результате чего он либо не сопоставлялся, либо просто загружал индекс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...