Добрый день. Есть сайт на друпале. Отличается от тривиального случая тем, что он в подпапке drupal. Для него прописан rewrite.<div>Всего используется два location&#39;а:</div><div><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; ">
<br></blockquote><div><blockquote><i>location /drupal {</i></blockquote><blockquote><i>                if (!-e $request_filename) {</i></blockquote><blockquote><i>                        rewrite  ^/drupal(.*)  /drupal/index.php?q=$1 last;</i></blockquote>
<blockquote><i>                }</i></blockquote><blockquote><i>        }</i></blockquote><blockquote><i><br></i></blockquote><div><i><blockquote><div style="display: inline !important; ">location ~ \.php$ {</div></blockquote>
<blockquote><div style="display: inline !important; ">                fastcgi_pass   unix:/var/run/php-fpm/php.socket;</div></blockquote><blockquote><div style="display: inline !important; ">                fastcgi_index  index.php;</div>
</blockquote><blockquote><div style="display: inline !important; ">                include        /etc/nginx/fastcgi_params;</div></blockquote><blockquote><div style="display: inline !important; ">        }</div></blockquote>
<div><br></div><div><span class="Apple-style-span" style="font-style: normal;">Все работает замечательно. Но, недавно заметил интересное поведение: </span></div><div><span class="Apple-style-span" style="font-style: normal;">Если URI заканчивается на .php ( запрашивается php файл, пусть даже несуществующий ), nginx вернет мне 404 ошибку с текстом от fastcgi: No input file specified. </span></div>
<div><span class="Apple-style-span" style="font-style: normal;">Полез читать документацию про location. Ищутся сначала простые location&#39;ы, потом с регулярными выражениями. Если найден с регуляркой - выполняем. Если нет - найболее подходящий location без регулярки. Понимаем, что URI заканчивается на .php - тогда сразу скрипт передается на исполнение, и имел он ввиду первый location. Ладно. Делаем так, чтобы приоритетней был первый location. </span></div>
<div><span class="Apple-style-span" style="font-style: normal;">  Заменяем <i><span class="Apple-style-span" style="font-style: normal; "><i>location /drupal </i>на </span>location ~ /drupal </i>( делая из него регулярное выражение ). Однако, с таким положением, хоть и реврайты срабатывают, возвращается текст php. Т.е., после нахождения нужного location&#39;а, и применение rewrite&#39;а, дальше поиск не идет. </span></div>
<div><span class="Apple-style-span" style="font-style: normal;">  Можно подумать, что идет зацикленность. После применение rewrite&#39;а nginx все равно попадает в первый location. Но, в документации сказано, что таких переходов может быть до 10 штук. После этого nginx возвращает 500 ошибку. Так что, незнаю, почему такое поведение.</span></div>
<div><span class="Apple-style-span" style="font-style: normal;"><br></span></div></i></div><div><br></div><div><br></div></div></div>