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

2025-05-26 0 54

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;

include fastcgi_params;

}

要点:

1.~ \\.php 后面不能有$ 以便能匹配所有 *.php/* 形式的url
2. 通过设置更改 SCRIPT_FILENAME

我在实际使用张将这段代码融合到了fastcgi_params中。下面是我的nginx配置文件示例:
配置虚拟主机部分,支持pathinfonginx代码如下:

## 在nginx.conf的server部分:

?

1

2

3

4

5

6

7

8
server {

listen 8080;

server_name localhost;

location ~ \\.php {

include fastcgi.conf;

}

}

##要点: \\.php 后面没有$,以便匹配所有 *.php/* 形式
##重点代码见 fastcgi.conf 开头部分

fastcgi.conf 代码如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37
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;

}
收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 nginx配置支持php的pathinfo模式配置方法 https://www.kuaiidc.com/53297.html

相关文章

发表评论
暂无评论