Простой редирект средствами nginx

Igor Sysoev is at rambler-co.ru
Wed Feb 2 14:42:37 MSK 2005


On Wed, 2 Feb 2005, Mike Kolesnikov wrote:

> Igor Sysoev wrote:
>
>> Сейчас redirect просто добавляет полный URI к параметру.
>> На днях я полностью переписал rewrite - там будет возможность делать
>> редиректы.
>
> Замечательная новость! После гибкости mod_rewrite постоянно упираешься
> в косяки, подобные этому...
> А что Вы можете сказать по поводу "зацикливания" редиректа?
> Вроде как URI /forums/index.php не должен попадать в location = /forums/ ?

"=" означает точное равенство URI и location.

>> Если редирект не обязяателен, то можно сделать так:
>>         location = /forums/ {
>>                fastcgi_pass  localhost:1234;
>>                ...
>
> Вся идея как раз в редиректе, причем желательно 301 - для SEO :)

Будет такой вариант:
rewrite  ^/forums/$  /forums/index.php  permanent;

> Раз уж речь зашла о редиректах и rewrites, может кто-нибудь делал
> конструкцию для поддержки юзерских директорий плана domain.com/~user/?
> Для простоты, чтоб не трогать getpwent, предполагаем, что все они
> лежат в /home/user/web.
>
> Вроде бы вот это работает:
>
>  rewrite ^/~([\w-]+)/(.*)$       /home/$1/web/$2 last;
>
>  location ~* ^/home/([\w-]+)/web/ {
>         root /;
>         index index.htm index.html index.php;
>  }
>
> Но тогда становится возможным такой URL: http://domain.com/home/user/web/file,
> что не очень хорошо. Конечно, никто наверное и не заметит, но запрос
> domain.com/~user/dir (без конечного слэша) автоматом перенаправляет как раз
> на http://domain.com/home/user/web/dir/
>
> Хотя, если версия с новым rewrite модулем планируется к выходу вскоре,
> то вопрос наверное не актуален - надеюсь, там такие вещи будут делаться
> проще.

Нет, это неправильный подход. Нужно будет придумать что-то вроде

   location ~* ^/~([\w-]+) {
        alias /home/$1/web;
   }

или

   rewrite ^/~([\w-]+)/(.*)$  /home/$1/web/$2  alias;

тогда uri остаётся без изменений и редирект уйдёт правильным.
Я склоняюсь к реализации втрого варианта.


Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list