On 08/12/13 18:32, Валентин Бартенев wrote:
On Monday 12 August 2013 19:22:07 Sergey Kobzar wrote:
On 08/12/13 18:14, Валентин Бартенев wrote:
On Monday 12 August 2013 18:50:49 Sergey Kobzar wrote:
location / {

       rewrite ^/\?portfolio=hungary /en/europe/hungary last;
       rewrite_log on;

       try_files $uri $uri/ /index.php?q=$request_uri;

}


Запрашиваемый URL:

http://site.com/en/?portfolio=hungary

В логе:

2013/08/12 17:44:46 [notice] 21714#0: *1 "^/\?portfolio=hungary" does
not match "/", client: 1.1.1.1, server: site.com, request: "GET
/?portfolio=hungary HTTP/1.1", host: "site.com"

Почему не редиректит на /en/europe/hungary?

Или решается только через $args + if ?

Разумеется параметры не учитываются при сопоставлении URI в rewrite.

Т.е. if + $args? Может есть элегантный способ? В настледство досталось
сотни таких URL'ов - нужно безболезненно перейти на новую реализацию...


$args служит для других целей обычно, и правильно написать
регулярку с $args - задача столь же сложная, как если бы они
учитывались в rewrite или location.  Все почему-то забывают,
что параметры запроса могут идти в любой последовательности
и среди них могут быть ещё параметры, которые не ожидаются.

Правильно: if + $arg_*

Для сотен: map + $arg_*

У меня число перестановок кончно, т.к. старые URL остались только в поисковиках.

Идея понятна. Спасибо.



--
Валентин Бартенев
http://nginx.org/en/donation.html
_______________________________________________
nginx-ru mailing list
[email protected]
http://mailman.nginx.org/mailman/listinfo/nginx-ru


_______________________________________________
nginx-ru mailing list
[email protected]
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Ответить