Нужна помощь с rewrite

Igor Sysoev is at rambler-co.ru
Wed Feb 20 16:41:53 MSK 2008


On Wed, Feb 20, 2008 at 10:59:07AM +0300, Prohor Utishev wrote:

> После многочисленных попыток так и не удалось переделать rewrite Apache 
> в nginx.
> 
> В .htaccess имеем:
> 
> RewriteEngine  On
> RewriteBase    /
> RewriteCond    %{REQUEST_URI}          ^/$     [OR]
> RewriteCond    %{REQUEST_FILENAME}     !-d
> RewriteCond    %{REQUEST_FILENAME}     !-s
> RewriteCond    %{REQUEST_FILENAME}     !-l
> RewriteRule    (.*)                    /index.php/$1
> 
> В  итоге пришел к рабочей конструкции:
> 
>        root          /home/www;
>        if (!-e $request_filename) {
>        rewrite ^(.*)$ /index.php?q=$1 last;
>        }
> 
> но нужно получить как в .htaccess /index.php/$1, а такой редирект отдаёт 
> 404 ошибку.

А куда это потом уходит ? Если в FastCGI, то, скорее всего, $1 нужно
засовывать в PATH_INFO. Я бы это чудо PHP-мысли переписал бы так:

        location = / {
            fastcgi_pass   ...
            fastcgi_param  SCRIPT_FILENAME  /home/www/index.php;
            ...
        }

        location / {
            ...
            error_page 404 = @fallback;
        }

        location @fallback {
            fastcgi_pass   ...
            fastcgi_param  SCRIPT_FILENAME  /home/www/index.php;
            fastcgi_param  PATH_INFO        $uri;
            ...
        }


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





More information about the nginx-ru mailing list