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