@rinokonli

Как сделать nginx redirect по регулярным выражениям?

Всем доброго дня! подскажите плз как с помощью nginx и регулярных выражений сделать следующее:

есть урлы на сайте - они все в таком формате:
первый тип улов:
www.site.ru/catalog/cat/1-razdel-odin.html
нужен редирект на такой урл:
www.site.ru/razdel-odin
(то есть убираем /cataloc/cat/, удалить цифры в конце и обрезать ".html" )

второй тип улов:
www.site.ru/catalog/1-razdel-odin/157-podokonniki.html
нужен редирект на такой урл:
www.site.ru/razdel-odin/podokonniki
(то есть убираем /cataloc/, удалить цифры в названиях подпапкам и в конце и обрезать ".html" )

третий тип улов
www.site.ru/catalog/18-tovary-dlya-dachi/292-sadov...
нужен редирект на такой урл:
www.site.ru/tovary-dlya-dachi/sadovaya-mebel/derev...
(то есть убираем /cataloc/, удалить цифры в названиях в подпапках, кроме самого последней части урла, там надо цифры переместить в конец урла-через тире, и в конце самом обрезать ".html" )
  • Вопрос задан
  • 3871 просмотр
Решения вопроса 1
Ascendant
@Ascendant
PHP/AngularJS/Sphinx/nginx
Адреса очень похожи и можно было бы обойтись одним выражением с модификатором /g:

[0-9]+-([-\w]+)(\.html)?

Но поскольку в nginx нельзя при разборе адреса использовать /g, то каждый случай надо разбивать отдельно:

if ($uri ~ "/catalog/cat/[0-9]+-([-\w]+)\.html") {
  rewrite /catalog/cat/[0-9]+-([-\w]+)\.html /$1 redirect;
}

if ($uri ~ "/catalog/[0-9]+-([-\w]+)/[0-9]+-([-\w]+)\.html") {
  rewrite /catalog/[0-9]+-([-\w]+)/[0-9]+-([-\w]+)\.html /$1/$2 redirect;
}

if ($uri ~ "/catalog/[0-9]+-([-\w]+)/[0-9]+-([-\w]+)/[0-9]+-([-\w]+)\.html") {
  rewrite /catalog/[0-9]+-([-\w]+)/[0-9]+-([-\w]+)/[0-9]+-([-\w]+)\.html /$1/$2/$3 redirect;
}


Можно еще попробовать сделать через map.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@rinokonli Автор вопроса
спасибо! работает супер

но столкнулся с еще одной непонятной проблемой , пытаюсь применить заданный шаблон к другой ситуации когда надо оставить /catalog/ но убрать цифры дальше в урле www.site.ru/catalog/1-razdel-odin/157-podokonniki.html
привести
www.site.ru/catalog/1-razdel-odin/157-podokonniki.html
к виду
www.site.ru/catalog/razdel-odin/podokonniki

не работает почему-то шаблок
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы