Правила перезаписи Nginx не работают / игнорируются

В настоящее время я пытаюсь переписать это:

index.php?page=Example&paramX=1&paramY=2

в

index.php/Example/1/?paramY=2

Тем не менее, это не работает:

rewrite ^index\.php/\?page=Example&paramX=([0-9]+)&paramY=([0-9]+)$ /index.php/Example/$arg_paramX/?paramY=$arg_paramY permanent;

В apache2 я сейчас использую

RewriteCond %{QUERY_STRING} page=Example&paramX=([0-9]+)&paramY=([0-9]+)
RewriteRule ^index\.php$ /index.php/Example/%1/?paramY=%2 [R=permanent,L]

который работает.

1 ответ

Решение

Вы не можете сопоставить параметры строки запроса, как это в nginx, вы должны попытаться проверить отдельные аргументы, используя что-то вроде if:

location /index.php {
   if ($arg_page = "Example") {
      rewrite ^ /index.php/Example/$arg_paramX/?paramY=$arg_paramY permanent;
   }
}

Если вам абсолютно необходимо проверить это paramX а также paramY являются [0-9]+, тогда вам нужно будет сделать что-то вроде хака для вложенных операторов IF, что-то вроде этого.

Другие вопросы по тегам