nginx中path模式配置示例
nginx服务器默认是不支持pathinfo模式的,即类似index.php/index形式的url会提示404。在这里,需要对nginx配置文件中需要开启pathinfo模式的server予以修改配置,修改nginx.conf文件如下:
server{
server_name blog.com;
listen 80;
root /home/wwwroot/blog;
index index.php index.html index.htm;
access_log /data/log/blog.access.log;
error_log /data/log/blog.error.log;
location / {
index index.php;
if (!-e $request_filename){
rewrite ^/(.*)$ /index.php/$1 last;
break;
}
}
location ~ \.php {
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/dev/shm/php-cgi.sock;
fastcgi_index index.php;
#fastcgi_param script_filename $document_root$fastcgi_script_name;
include fastcgi.conf;
include fcgi_pathinfo.conf;
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$"){
set $real_script_name $1;
set $path_info $2;
}
fastcgi_param script_filename $document_root$real_script_name;
fastcgi_param script_name $real_script_name;
fastcgi_param path_info $path_info;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {
expires 30d;
}
location ~ .*\.(js|css)?$ {
expires 7d;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html{
root /home/wwwroot/;
}
}
并添加fcgi_pathinfo.conf如下:
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 request_uri $request_uri;
fastcgi_param document_uri $document_uri;
fastcgi_param document_root $document_root;
fastcgi_param server_protocol $server_protocol;
fastcgi_param https $https if_not_empty;
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;
fastcgi_param redirect_status 200;
重要的就是,~\.php后面不能有$,以便能够匹配所有*.php/*形式的url,并且if与后面的括号之间必须有一个空格。
完毕之后,重启nginx。