nginx и rewrite 301 redirect

V8
На сайте с 09.04.2011
Offline
16
775

Необходимо ссылки вида: /?page=test$lang=ru переделать в: /test/ru

Для этого использую такую конструкцию (она замечательно работает):

rewrite ^/([a-z0-9]+)/([a-z0-9]+)(/?)+$ /?page=$1&lang=$2 last;

Сейчас появилась задача сделать 301 редирект таким ссылкам?

Для этого придумал вот такую конструкцию:

rewrite ^/([a-z0-9]+)/([a-z0-9]+)(/?)+$ /?page=$1&lang=$2 permanent; #301 redirect

Она работает, но перенаправляет с /test/ru на /?page=test$lang=ru

Мне же необходимо с /?page=test$lang=ru на /test/ru.

V8
На сайте с 09.04.2011
Offline
16
#1

Насколько я понял для 301 редиректа с "/?page=test$lang=ru" на "/test/ru", необходимо использовать такую конструкцию:

location / {

if ($args ~* "/?page=[a-z0-9]+&lang=[a-z]+") {
rewrite ^ /$arg_page/$arg_lang? permanent;
}
}
rewrite ^/([a-z0-9]+)/([a-z]+)(/?)+$ /?page=$1&lang=$2 last;

Таким образом зайдя по ссылке "/?page=test$lang=ru" nginx перенаправляет на "/test/ru".

Но открыв страницу "/test/ru". Nginx выдает ошибку "Moved Permanently". Что я не так делаю?

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий