LinuxForum.Fans
Тема

nginx и rewrite 301 redirect

Автор: Dima85 5 сообщений 2915 просмотров
#278444

Необходимо ссылки вида: /?page=test$lang=ru переделать в: /test/ru
Для этого использую такую конструкцию (она замечательно работает):

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

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

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

text
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.

Подскажите, как это сделать?

#278886

Неужели в Nginx это не реализуем?

#282746

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

text
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". Что я не так делаю?

#283430

Dima85 вы не подскажите мне как переделать вот это правило от Apache под nginx ?

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Войдите или зарегистрируйтесь, чтобы ответить.