Я перемещаю существующий веб-сайт и перехожу из 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®ion=$1
RewriteRule ^([a-zA-Z0-9\-\_]+)/([0-9{4}]+)/([a-zA-Z0-9\-\_]+)$ index.php?page=program®ion=$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®ion=$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. Я перепробовал все виды поиска и предложений по регулярному выражению, в результате чего он либо не сопоставлялся, либо просто загружал индекс.