nginx配置支持php的pathinfo模式配置方法
程序员文章站
2022-12-07 23:50:59
nginx模式不支持pathinfo模式,类似info.php/hello形式的url会被提示找不到页面。下面的通过正则找出实际文件路径和pathinfo部分的方法,让ng...
nginx模式不支持pathinfo模式,类似info.php/hello形式的url会被提示找不到页面。下面的通过正则找出实际文件路径和pathinfo部分的方法,让nginx支持pathinfo。
location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; ##通过设置模拟出pathinfo 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 script_filename $document_root$real_script_name; fastcgi_param script_name $real_script_name; fastcgi_param path_info $path_info; include fastcgi_params; }
要点:
1.~ \.php 后面不能有$ 以便能匹配所有 *.php/* 形式的url
2. 通过设置更改 script_filename
我在实际使用张将这段代码融合到了fastcgi_params中。下面是我的nginx配置文件示例:
配置虚拟主机部分,支持pathinfo的nginx代码如下:
## 在nginx.conf的server部分:
server { listen 8080; server_name localhost; location ~ \.php { include fastcgi.conf; } }
##要点: \.php 后面没有$,以便匹配所有 *.php/* 形式
##重点代码见 fastcgi.conf 开头部分
fastcgi.conf 代码如下:
fastcgi_pass 127.0.0.1:9000; ##fastcgi_index index.php; 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 script_filename $document_root$real_script_name; fastcgi_param script_name $real_script_name; fastcgi_param path_info $path_info; ## 以上是支持pathinfo的重点部分 fastcgi_param gateway_interface cgi/1.1; fastcgi_param server_software nginx; 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 $fastcgi_script_name; 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 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;
自己的配置:
server { listen 80; server_name www.touchopenid.com; index index.html index.htm index.php; root /data0/htdocs/openid; location ~ \.php($|/) { set $script $uri; set $path_info ""; if ($uri ~ "^(.+\.php)(/.+)") { set $script $1; set $path_info $2; } fastcgi_pass 127.0.0.1:9000; include fastcgi_params; fastcgi_param path_info $path_info; fastcgi_param script_filename $document_root$script; fastcgi_param script_name $script; }
上一篇: Nginx自定义访问日志的配置方式