Nginx rewrite — преобразовать адрес с параметрами в ЧПУ-адрес?

На одном из сайтов были раньше были адреса с параметрами, типа index.php?bar=foo&z=x. Сейчас сайт переписали, адреса с ЧПУ, на фронте стоит nginx.


Необходимо прописать реврайты со старых адресов на новые, чтобы в интернете ссылки не побились.


Почитав, выяснил, что в rewrite строка параметров не передается, но она есть в переменной $query_string.


Как первый вариант, сделал так:

<pre>
if ($query_string = 'bar=foo&z=x') {
  rewrite ^(.*)$ http://site.ru/bar/foo/z/x/ permanent;
}
</pre>



Но наткнулся на то, что редирект идет реально на страницу site.ru/bar/foo/z/x/?bar=foo&z=x, что вызывает повторное срабатывание этой конструкции и зациливание.


Есть ли более изящное решение?
  • Вопрос задан
  • 8078 просмотров
Пригласить эксперта
Ответы на вопрос 3
По поводу добавления query_string цитата из документации:
Если в строке замены указаны аргументы, то предыдущие аргументы запроса добавляются после них. Можно отказаться от этого добавления, указав в конце строки замены знак вопроса:
Ответ написан
Комментировать
@iDrum
sysoev.ru/nginx/docs/http/ngx_http_rewrite_module.html

Если в строке замены указаны аргументы, то предыдущие аргументы запроса добавляются после них. Можно отказаться от этого добавления, указав в конце строки замены знак вопроса:

rewrite ^/users/(.*)$ /show?user=$1? last;
Ответ написан
Комментировать
muxx
@muxx Автор вопроса
Да, смотрел невнимательно.
Спасибо.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы