LINUX.ORG.RU

Как сделать nginx rewrite с url без кода языка в начале, на url с кодом языка.

 , ,


0

1

Добрый день!

Раньше на сайте не было переключения между языками. Сейчас в начало url добавляется код языка. Например: было http://www.example.com/ssilka стало http://www.example.com/ru/ssilka

Как сделать правильно редирект чтобы все ссылки без кода /ru/ вначале перенаправлялись на такие же ссылки только с кодом /ru/.

Я пробовал сделать так

set $default_lang "/ru";
if ($request_uri !~ "^/en/.*$|^/ru/.*$")
{
return 301 https://$host$default_lang$request_uri;
}

но в таком случае не работает ссылка на главную http://www.example.com и ссылки типа http://www.example.com/ru http://www.example.com/en

а также проблемы з ссылками на изображения и js а также css .

С уважением, Сергей.



Последнее исправление: serglema (всего исправлений: 1)

Сделайте отдельные location для «= /», просто «/», «/ru», «/en» и для статики

http://nginx.org/ru/docs/http/ngx_http_core_module.html#location

Внутри локейшена «/» добавьте правило по рерайту если все остальные локейшены вы создали, то можно без проверки

if ($request_uri !~ «^/en/.$|^/ru/.$»)

а просто:

return 301 https://$host$default_lang$request_uri;

, внутри остальных, по идее это не нужно.

chaos_dremel ★★
()
Ответ на: комментарий от chaos_dremel

Так мне же нужно старые ссылки типа http://www.example.com/ssilka http://www.example.com/ssilka1 http://www.example.com/ssilka2

перенаправить автоматически на http://www.example.com/ru/ssilka http://www.example.com/ru/ssilka1 http://www.example.com/ru/ssilka2

А если пользователь уже набирает правильную ссылку с /ru/ - http://www.example.com/ru/ssilka , то перенаправление уже не нужно.

serglema
() автор топика
Ответ на: комментарий от serglema

Да, именно для этого я предложил сделать отдельные локейшены «/ru» и «/en» в которых не будет правил перенаправления

chaos_dremel ★★
()
Ответ на: комментарий от serglema
    location = / {
      proxy_pass http://server;
    }

    location / {
      set $default_lang "/ru";
      return 301 https://$host$default_lang$request_uri;
    }

  location ~ ^/(ru|en)/ {
      proxy_pass http://server;
    }
chaos_dremel ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.