Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: error_page 404 403 =200 / index.php; выдаёт 200 но не index.php :(
On Mon, Sep 24, 2007 at 08:56:43PM +0400, Name Last name wrote:
> error_page 404 403 =200 /index.php;
>
> location / {
> root /some/path/;
> index index.php;
> }
>
> запрос: http://web1.server/something
>
> судя по заголовкам, эта конструкция выдаёт ответ HTTP/1.x 200 OK
>
> Но браузер показывает страничку Not found.
>
> Что странно, поскольку хотелось добиться показа индексной странички в случае
> 403 и 404.
>
> Желаемого результата удалось добится написав error_page 403 404 =200
> http://web1.server/index.php; . Собственно, цель достигнута. Но вопрос
> остался не до конца ясным: так и должно быть, или, возможно дело в том, что
> error_page указан до директивы root?
>
> Ниже конфиг для этого сервера.
>
> server {
> listen 192.168.0.20:80;
> server_name web1.server;
>
> rewrite ^/(.*)/(.*).html$
> /view_video.php?viewkey=$1&title=$2 last;
> rewrite ^/flvideo/flvplayer.swf$ /pl.php last;
> rewrite "^/(flvideo|thumb|members|la1vc2b4ag3)/(.+)$"
> http://media1.server/$1/$2 permanent;
>
> access_log /var/log/nginx/web1.server.access.log main;
>
> error_page 403 404 =200 /index.php;
>
> location / {
> root /srv/www/vhosts/server.com;
> index index.php;
> }
>
> location /swfs {
> internal;
> root /srv/www/vhosts/server_internal;
> }
>
> location ~ \.php$ {
> proxy_pass http://127.0.0.1:80;
> proxy_redirect off;
>
> proxy_set_header Host $host;
> proxy_set_header X-Real-IP $remote_addr;
> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
>
> client_max_body_size 506m;
> client_body_buffer_size 128k;
>
> proxy_connect_timeout 3005;
> proxy_send_timeout 3005;
> proxy_read_timeout 3005;
>
> proxy_buffer_size 4k;
> proxy_buffers 4 32k;
> proxy_busy_buffers_size 64k;
> proxy_temp_file_write_size 64k;
>
> }
>
> location ~ /\.ht {
> deny all;
> }
> }
Это фича.
proxy_pass http://127.0.0.1:80;
без URI part передаёт оригинальный URI клиента, а не /index.php (в данном
случае).
Лечится так:
location ~ \.php$ {
proxy_pass http://127.0.0.1:80;
}
location = /index.php {
proxy_pass http://127.0.0.1:80/index.php;
}
Всё остальное proxy_... можно вынести на уровень сервера, чтобы не дублировать.
--
Игорь Сысоев
http://sysoev.ru
|