rewrite rules. help pls.

Maxim Dounin mdounin at mdounin.ru
Mon Jun 10 10:13:55 UTC 2013


Hello!

On Mon, Jun 10, 2013 at 12:23:13PM +0400, Andrey Ermishin wrote:

> Уважаемые all.
> 
> Пытаюсь мигрировать в apache на Nginx.
> 
> nginx установлен вместе с php5-fpm.
> 
> Возникла проблема с переносом правил для rewrite.
> 
> На апаче правила выглядят так:
> 
> RewriteEngine On
> RewriteCond %{REQUEST_URI} /playlist\.xspf
> RewriteRule (.*) channels.php [L,QSA]
> 
> на nginx пробую такую конструкцию:
> 
> server {
>     ...
>     location /eltex {
>         rewrite /playlist\.xspf /eltex/channels.php break;
>     }
>     ...
>     location ~ \.(php)$ {
>         ...
>         fastcgi_pass   php_backends;
>         ...
>     }
>     ...
> }
> 
> 
> Собственно  говоря в этом случае channels.php не выполняется, а просто
> отдается содержимое скрипта.

Во-первых, rewrite у вас не имеет шанса сработать, т.к. запрос 
"/playlist.xspf" не имеет шансов попасть в location /eltex.

Во-вторых, даже если бы он сработал - запрос после "rewrite ...  
break" обрабатывается в том же location, где был сделан rewrite.  
А там у вас, судя по всему, никакого fastcgi_pass нет.  Если нужно 
выбрать другой location - правильнее всего написать "rewrite .. 
last".

Подробная документация есть тут:

http://nginx.org/r/location/ru
http://nginx.org/r/rewrite/ru

> Если же в backend добавляю     location ~ \.(php|xspf)$
> то вообще error ~404

Что опять же ожидаемо, ибо файла /playlist.xspf у вас, судя по 
всему, нет.

> Что делать? как правильно составить конфигурацию для nginx?

Совсем правильно как-то так:

    location = /playlist.xspf {
        fastcgi_pass php_backends;
        fastcgi_param SCRIPT_FILENAME $document_root/eltex/channels.php;
        include fastcgi_params;
    }

-- 
Maxim Dounin
http://nginx.org/en/donation.html



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