Re: Как правильно сделать редирект

Alexander Moskalenko alexander.moskalenko на gmail.com
Пт Сен 16 10:37:54 UTC 2011


Игорь, если подобный rewrite находится в секции server это хуже чем через
location ?

редирект вот такой:
rewrite ^(\/+[\w\/-]*[^\/])$    $scheme://$host$1/ permanent;

2011/9/16 Igor Sysoev <igor at sysoev.ru>

> On Fri, Sep 16, 2011 at 04:17:52PM +0700, Игорь Вавржин wrote:
>
> > >>>>>>> On Fri, Sep 16, 2011 at 11:55:01AM +0700, Игорь Вавржин wrote:
> > >>>>>>>> Не подскажите как правильнее сделать редирект со страниц у
> которых
> > >>>>>>>> REQUEST_URI не заканчиватся на / и у которых в урл после
> последнего
> > >>>>>>>> слэша нет символа "."
> > >>>>>>>>
> > >>>>>>>> / на такой же урл но со слэшем на конце?
> > >>>>>>>>
> > >>>>>>>> Примеры:
> > >>>>>>>> stite.com/page ->     stite.com/page/
> > >>>>>>>> stite.com/page/ ->     нет редиректа
> > >>>>>>>> stite.com/page.html ->     нет редиректа
> > >>>>>>>> stite.com/image.jpg ->     нет редиректа
> > >>>>>>> Если это статические файлы и каталоги, то nginx делает это
> автоматом.
> > >>>>>>>
> > >>>>>> Нет это не статика.
> > >>>>> А что должно уходить на бэкенд ?
> > >>>>>
> > >>>>>
> > >>>> У меня пока как-то вот так выглядит:
> > >>>>
> > >>>> location ~* /[^/\.]+$ {
> > >>>>            rewrite ^(.*)$ http://$http_host$1/ permanent;
> > >>>> }
> > >>> Да, можно так. Единственное, я бы отделил это от статики и вынес бы
> > >>> в location, который работает с бэкендом:
> > >>>
> > >>> location / {
> > >>>
> > >>>       location ~ (?<URL>^.*/[^/.]+$) {
> > >>>           return   301  http://$host$url/$is_args$args;
> > >>>       }
> > >>>
> > >>>       location / {
> > >>>           proxy_pass  ...
> > >>>           # or fastcgi_pass  ...
> > >>>       }
> > >>> }
> > >>>
> > >>> location /images/ {
> > >>> }
> > >>>
> > >> Игорь спасибо за подсказку насчет переноса location. Объясните
> > >> пожалуйста что означает вот эта часть в регулярном выражении:
> > >> (?<URL>
> > > Именованное выделение, вот тут подробнее, хотя и не про location:
> > > http://nginx.org/en/docs/http/server_names.html#regex_names
> > >
> > Ух ты :) классная штука. Игорь а не подскажите вот в такой записи:
> >
> > location ~ \.php$ {
> >          location ~ (?<URL>^.*/[^/.]+$) {
> >              return   301  http://$host$url/$is_args$args;
> >          }
> > }
> >
> > Воторой location проверяет соответствие с каким location?
> > Просто выше по конфигу стоит :
> >
> > location / {
> >          index index.php;
> >          try_files $uri $uri/ /index.php?$args;
> > }
> > ну и дальше:
> > location ~ \.php$ {
> >          location ~ (?<URL>^.*/[^/.]+$) {
> >              return   301  http://$host$url/$is_args$args;
> >          }
> > }
> >
> > И соответственно в location \.php попадает после внутреннего редиректа.
> > Так вот во внутреннем location соответсвие идет покакому location -
> > изначальному или после редиректа? И сразу следующий вопрос: если идет по
> > изначальному, то как достать текущий location который после редиректа
> > проихошел?
>
> Так работать не будет.
> Тогда только так:
>
> location / {
>    index index.php;
>    try_files $uri $uri/ /index.php?$args;
> }
>
> location ~ (?<URL>^.*/[^/.]+$) {
>    return   301  http://$host$url/$is_args$args;
> }
>
> location ~ \.php$ {
>    ...
> }
>
>
> --
> Игорь Сысоев
> http://sysoev.ru
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20110916/f024af4a/attachment-0001.html>


Подробная информация о списке рассылки nginx-ru