REwrite i QueryString

Igor Sysoev is at rambler-co.ru
Tue May 17 17:17:26 MSD 2005


On Tue, 17 May 2005, Aleksej Novikov wrote:

> Tuesday, May 17, 2005, 3:47:42 PM, you wrote:
>> html - это дефолтный root, если root не описан, то равен <prefix>/html
>> Нужно для этого location описать root:
>>      location  ~*  \.html$ {
>>          root   /path/to/root;
>>          rewrite .* /index.php?r=$request_uri break;
>>      }
>> И ещё я убрал точку перед ./index.php.
>> Отлаживать rewrite можно по логу, уровень notice и директива
>> rewrite_log [on|off];
> Ну, что могу сказать, определённые сдвиги есть. Вышеуказанная
> конструкция возвращает мне только index.php без никаких параметров,
> при это возвращает так, что броузер начинает её скачивать а внутри
> оказывается исходник на PHP. То есть как я понимаю, не передаётся на
> CGI. Вот мой колнфиг.
>
>    location  ~* \.(html)$ {
>           rewrite_log on;
>           root   /data/www/htdocs/www.*******.com;
>           rewrite .* /index.php?r=$request_uri break;
>        }
>
>    location ~* ^.+\.(php) {
>            fastcgi_pass  127.0.0.1:9000;
>            fastcgi_root   /data/www/htdocs/www.*******.com/;
>            fastcgi_index  index.php;
>            fastcgi_temp_path  /tmp ;
>            fastcgi_buffers               4 32k;
>            fastcgi_busy_buffers_size     32k;
>            fastcgi_temp_file_write_size  32k;
>        }

Потому что в рамках "location  ~* \.(html)$" запрос обрабатывается
как статический файл. Нужно или добавить fastcgi_... директивы
в "location  ~* \.(html)$", или убрать break из rewrite'а. Во втором
случае после rewrite'а будет снова определяться location и запрос
попадёт в "location ~* ^.+\.(php)".

Кстати, скобки вокруг (html) и (php) не нужны.

И ещё, начиная с 0.1.29 fastcgi_root нет, и нужно указывать все нужные
FastCGI параметры.


Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list