Re: ЧПУ и 301 redirect
Maxim Dounin
mdounin at mdounin.ru
Sun Nov 11 19:38:31 UTC 2012
Hello!
On Sun, Nov 11, 2012 at 09:37:41AM -0500, Renat wrote:
> Максим, попав на /{a}/{b} nginx должен отдать /?page={a}&lang={b}. Но он не
> должен менять url.
Сделайте в этом месте прямое обращение к бекенду - и будет вам
счастье. А иначе у вас цикл
Как-то так должно работать:
location / {
# just in case - тут проверку я поменял на сколько-нибудь
# разумную, ибо "/?" у вас очевидно неверно; если нужна
# менее строгая проверка - поправить по необходимости
if ($args ~* "^page=[a-z0-9]+&lang=[a-z]+$") {
rewrite ^ /$arg_page/$arg_lang? permanent;
}
rewrite ^/([a-z0-9]+)/([a-z]+)(/?)+$ /backend?page=$1&lang=$2 last;
}
location = /backend {
# для прокси - просто меняем путь обратно на /:
proxy_pass http://backend.example.com/;
# для php via fastcgi - как-то так:
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to/index.php;
...
}
А ещё лучше - сделайте прямое обращение к бекенду без
всяких преобразований, и пусть бекенд занимается разбором URL'ов
на составляющие. Придумывать костыль из nginx'а и rewrite-правил,
вместо того чтобы нормально разобрать адрес на полноценном языке
программирования - то неправильно.
--
Maxim Dounin
http://nginx.com/support.html
Подробная информация о списке рассылки nginx-ru