ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: ЧПУ и 301 redirect



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 mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.