Реврайты

Sergiy Kukunin sergey.kukunin на gmail.com
Ср Фев 3 03:18:12 MSK 2010


Добрый день. Есть сайт на друпале. Отличается от тривиального случая тем,
что он в подпапке drupal. Для него прописан rewrite.
Всего используется два location'а:

>
> *location /drupal {*

*                if (!-e $request_filename) {*

*                        rewrite  ^/drupal(.*)  /drupal/index.php?q=$1 last;
*

*                }*

*        }*

*
*

*

location ~ \.php$ {

                fastcgi_pass   unix:/var/run/php-fpm/php.socket;

                fastcgi_index  index.php;

                include        /etc/nginx/fastcgi_params;

        }


Все работает замечательно. Но, недавно заметил интересное поведение:
Если URI заканчивается на .php ( запрашивается php файл, пусть даже
несуществующий ), nginx вернет мне 404 ошибку с текстом от fastcgi: No input
file specified.
Полез читать документацию про location. Ищутся сначала простые location'ы,
потом с регулярными выражениями. Если найден с регуляркой - выполняем. Если
нет - найболее подходящий location без регулярки. Понимаем, что URI
заканчивается на .php - тогда сразу скрипт передается на исполнение, и имел
он ввиду первый location. Ладно. Делаем так, чтобы приоритетней был первый
location.
  Заменяем location /drupal на location ~ /drupal ( делая из него регулярное
выражение ). Однако, с таким положением, хоть и реврайты срабатывают,
возвращается текст php. Т.е., после нахождения нужного location'а, и
применение rewrite'а, дальше поиск не идет.
  Можно подумать, что идет зацикленность. После применение rewrite'а nginx
все равно попадает в первый location. Но, в документации сказано, что таких
переходов может быть до 10 штук. После этого nginx возвращает 500 ошибку.
Так что, незнаю, почему такое поведение.

*
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20100203/3a97b1a5/attachment-0001.html>


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