nginx配置支持php的pathinfo模式配置方法

nginx模式不支持pathinfo模式,类似info.php/hello形式的url会被提示找不到页面。下面的通过正则找出实际文件路径和pathinfo部分的方法,让nginx支持pathinfo。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

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;

includefastcgi_params;

}

要点:

1.~ \.php 后面不能有$ 以便能匹配所有 *.php/* 形式的url

2. 通过设置更改 SCRIPT_FILENAME

我在实际使用张将这段代码融合到了fastcgi_params中。下面是我的nginx配置文件示例:

配置虚拟主机部分,支持pathinfo的nginx代码如下:

## 在nginx.conf的server部分:

1

2

3

4

5

6

7

8

server {

listen 8080;

server_name localhost;

location ~ \.php {

includefastcgi.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;

自己的配置:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

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;

}

相关文章

  • 访问php页面提示An Error Occurred的解决办法
  • 错误502 upstream sent too big header while reading response header from upstream的解决办法
  • Nginx利用多核cpu提高性能_配置参数worker_cpu_affinity
  • nginx为目录或网站加上密码认证 [转]
  • nginx禁止访问某个文件和目录(文件夹)

This entry was posted in 服务器 and tagged nginx, pathinfo by admin. Bookmark the permalink.

2 THOUGHTS ON “NGINX配置支持PHP的PATHINFO模式配置方法”

  1. Pingback: [教程]CentOS5.5平台安装lemp | haohtml's blog

  2. Pingback: Centos下安装lnmp教程(最新版2012-02-05) | haohtml's blog