ПРОЕКТЫ 


  АРХИВ 


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: добавление слэшей в кон ец адресов без оных



Hello!

On Mon, Dec 06, 2010 at 08:47:00PM -0500, anon wrote:

> Уже который раз задаюсь этим вопросом,
> спрашивал то там, то здесь. Но никто так
> и не смог предложить рабочий способ.
> 
> Где-то видел потенциально возможные
> варианты:
> [code]if (!-e $request_filename)
> {
>   rewrite ^/(.*[^/])$ $1/ permanent;
> }[/code]
> 
> [code]location ~ ^(.*[^/])$ {
>   if (!-e $document_root/$1) {
>     rewrite ^(.*) $1/ permanent;
>   }
> }[/code]
> 
> А как нужно правильно? Чтобы и
> физические файлы читались, и редирект
> работал корректно.

Как-то так, чтобы и файлы отдавались, и статические индексы в 
каталогах работали, а для всего что не найдено - редирект с 
добавлением / и на бекенд (не проверял, но должно работать):

    location / {
        try_files $uri @redirect;
    }
 
    location ~ /$ {
        try_files $uri/index.html @fallback;
    }

    location @redirect {
        rewrite ^ $uri/ permanent;
    }

    location @fallback {
        fastcgi_pass/proxy_pass/...
    }

Для 0.7.1 .. 0.8.41 понадобится ещё

    location = / {
        try_files $uri/index.html @fallback;
    }

Если статические индексы в каталогах не нужны - соответствующий 
try_files ... @fallback можно заменить на fastcgi_pass/... сразу. 
Ну и соответственно location @fallback убрать за ненадобностью.

Можно ещё то же самое сделать через error_page 404, будет немного 
быстрее и чуть-чуть надёжнее (на 1 syscall меньше, и нет 
возможности для race'а при удалении статических файлов), но конфиг 
получится чуть сложнее.

А вот if'ы использовать не надо, оно тут всяко хуже try_files, а в 
зависимости от ситации может так стукнуть - мало не покажется.  
Don't do it, it hurts.  http://wiki.nginx.org/IfIsEvil

Maxim Dounin

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.