как убрать путь в nginx и сделать redirect?

Есть запрсы условно https://example.com/ru/paths или https://example.com/en/paths, после ru и en может буть любой путь и с параметрами и без. Вопрос как убрать ru и en и оставить например https://example.com/paths. На новом сайте нет указаанию языка в пути, но гугл сканирует их а это плохо для seo


Ответы (1 шт):

Автор решения: Михаил Ребров

все просто

нужно составить директиву rewrite с помощью регулярного выражения, которое будет обрабатываеть все запросы начинающиеся с en или с ru

выглядеть оно будет примерно так:

^/(en|ru)(.*)$
  • ^ - символ начала строки
  • $ - символ конца строки
  • (...) - группировка, позже к ней можно будет обращаться через знак доллара и номера этой группировки символов ($1,$2)
  • . - может обозначать любой символ
  • .* - любое количество любых символов

как итог - ^/(en|ru)(.*)$ соответствует любой строке, начинающейся с /en или с /ru и с любым набором символов до конца строки после. Причем мы сгруппировали код языка и оставшуюся адресную строку, чтобы впоследствии с ними можно было работать.

В конфигурацию нужно будет добавить строку

rewrite ^/(en|ru)(.*)$ $2 permanent;

здесь мы объявляем директиву rewrite и передаем ей шаблон поиска в виде, составленного выше регулярного выражения и строкой замены ($2).

В данном случае мы будем заменять на вторую группу - то есть на оставшуюся строку.

Добавляется все это в блоке server

server {
    # ...
    rewrite ^/(en|ru)(.*)$ $2 permanent;
    # ...
}

на живом примере: введите сюда описание изображения

все работает как надо

→ Ссылка