Реврайты
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