Nginx 配置 pathinfo [转载]

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  #我建议这里使用~ \.php(/.*)?$

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;

转载自:http://linuxguest.blog.51cto.com/195664/694319/

本文出自 全栈笔记 版权所有,你可以在保留原文地址:Nginx 配置 pathinfo [转载] 及作者的情况下到你的网站或博客。

【上一篇】
【下一篇】

您可能感兴趣的文章:

发表评论

您必须 登录 后才能发表评论。