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

Igor Sysoev is at rambler-co.ru
Wed Feb 2 13:54:51 MSK 2005


On Wed, 2 Feb 2005, Mike Kolesnikov wrote:

> Что-то никак не могу заставить работать средствами nginx такой вот
> простейший редирект:
> RedirectMatch  301 ^/forums/$      /forums/index.php
>
> Вроде бы такая конструкция должна прокатить:
> location = /forums/     { redirect /forums/index.php; }
> но nginx-овский redirect зачем-то прицепляет паттерн в конец URI,
> и выходит вот что:
> 2005/02/02 12:06:23 [debug] 18419#0: *2 find location: = "/forums/"
> 2005/02/02 12:06:23 [debug] 18419#0: *2 http cl:-1 max:1048576
> 2005/02/02 12:06:23 [debug] 18419#0: *2 http redirect handler
> .....
> Location: http://127.0.0.1:8080/forums/index.phpforums/
>
> Более того, в следующем цикле URL опять почему-то совпадает, хотя
> по идее не должен, получается:
> 2005/02/02 12:13:15 [debug] 18535#0: *2 find location: "/"
> 2005/02/02 12:13:15 [debug] 18535#0: *2 find location: = "/forums/"
> 2005/02/02 12:13:15 [debug] 18535#0: *2 find location: ~ "^.+\.php$"
> 2005/02/02 12:13:15 [debug] 18535#0: *2 http cl:-1 max:1048576
> --> 2005/02/02 12:13:15 [debug] 18535#0: *2 http redirect handler <-- ?????
> .....
> Location: http://127.0.0.1:8080/forums/index.phpforums/index.phpforums/
>
> Почему вылезает отмеченная строчка, ведь location /forums/ не совпал?
>
> Ну и на следующем этапе:
> http://127.0.0.1:8080/forums/index.phpforums/index.phpforums/index.phpforums/
> и т.п.
>
> Что я делаю не так? Может, какое-то непонимание логики работы location
> и редиректов?
> Да, кстати, как бы еще добавить в redirect возможность указывать 301 :)

Сейчас redirect просто добавляет полный URI к параметру.
На днях я полностью переписал rewrite - там будет возможность делать
редиректы.

> Мой конфиг:
> worker_processes  1;
>
> error_log  logs/error.log;
> pid        logs/nginx.pid;
>
> events {
>    use rtsig;
>    connections  1024;
> }
>
>
> http {
>    include       conf/mime.types;
>    default_type  application/octet-stream;
>
>    server {
>        listen  8080;
>        access_log  off;
>        rewrite_log on;
>
>        location = /forums/     { redirect /forums/index.php; }
>
>        location ~* ^.+\.php$ {
>                fastcgi_pass  localhost:1234;
>                fastcgi_root   /usr/local/nginx/html;
>                fastcgi_index  index.php;
>
>                fastcgi_connect_timeout       10;
>                fastcgi_send_timeout          2m;
>                fastcgi_read_timeout          3m;
>
>                fastcgi_header_buffer_size    32k;
>                fastcgi_buffers               4 32k;
>                fastcgi_busy_buffers_size     32k;
>                fastcgi_temp_file_write_size  64k;
>
>                fastcgi_x_powered_by       off;
>        }
>
>        location / {
>                root html;
>                index index.htm index.html index.php;
>        }
>    }
> }

Если редирект не обязяателен, то можно сделать так:
        location = /forums/ {
               fastcgi_pass  localhost:1234;
               ...


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





More information about the nginx-ru mailing list