配置 nginx 支持 PATH_INFO

最近方法请移步:
《Nginx >= 0.7.31 已经支持 PATH_INFO》
http://hily.me/blog/2010/04/nginx_path_info/

示例配置:

server {
listen 80;
server_name localhost;

access_log /work/www/logs/localhost.access.log main;

location / {
root /work/www;
index index.html index.htm index.php;
rewrite ^/(?!index\.php|admincp\.php|robots\.txt|images|js|stylesheets)(.*)$ /index.php/$1 last;
}

location ~ \.php($|/) {
root /work/www;
fastcgi_index index.php;
fastcgi_buffer_size 32k;
fastcgi_buffers 8 32k;
set $script $uri;
set $path_info “”;

if ($uri ~ “^(.+?\.php)(/.*)$”) {
set $script $1;
set $path_info $2;
}

include fastcgi_params;
}

}

fastcgi_params:

fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $script;
fastcgi_param PATH_INFO $path_info;

fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;

fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;

fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;

# PHP only, required if PHP was built with –enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
fastcgi_pass unix:/tmp/php-fpm.socket;

其实很简单,就是把 index.php/xxx 后面的 /xxx 写到 fastcgi 的 PATH_INFO 参数中。
我这里还做了一层 rewrite,把:
http://localhost/index.php/controller/method/params
重写成了:
http://localhost/controller/method/params

— EOF —

14 thoughts on “配置 nginx 支持 PATH_INFO”

  1. 我按照你说的,配置一下,index.php去不掉

    location ~ .*.php {
    fastcgi_pass 127.0.0.1:9000;
    set $path_info “”;
    set $real_script_name $fastcgi_script_name;
    if ($fastcgi_script_name ~ “^(.+?.php)(/.+)$”) {
    set $real_script_name $1;
    set $path_info $2;
    }

    fastcgi_param PATH_INFO $path_info;
    fastcgi_param SCRIPT_FILENAME /data0/htdocs/damuqiao/yiyao/web/$fastcgi_script_name;
    include /usr/local/nginx/conf/fastcgi_params;
    }

发表评论

电子邮件地址不会被公开。 必填项已用*标注