Nginx的伪静态配置中使用rewrite来实现自动补全的实例

2025-05-26 0 37

nginx+php 使用的时候经常需要伪静态,一般大家都手动设置。那有没有办法让 nginx 自动补全路径呢?
这两天折腾很久,才实现了这样一个功能:
请求 /a/b/c
若文件不存在,查找 /a/b/index.php,/c 作为 PATH_INFO;
若文件不存在,查找 /a/index.php,/b/c 作为 PATH_INFO;
若文件不存在,查找 /index.php,/a/b/c 作为 PATH_INFO;
若文件不存在,返回 404.

虽然这种损耗性能的行为不适合部署,但在本机调试的时候还是能够带来方便的 🙂

server 端应有如下代码,其他部分使用自己的配置:

?

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

38

39

40

41

42

43

44

45

46

47

48
index index.php index.html index.htm;

location / {

set $path $request_uri;

set $path_info "";

try_files $uri $uri/ @404;

}

location @404 {

if ($path ~ ^(.*)(/.+)$) {

set $path $1/index.php;

set $path_info $2;

rewrite .* $path last;

}

return 404;

}

location ~ .+.php($|/) {

fastcgi_split_path_info ^(.+.php)(/.+)$;

if ($path_info !~ .*) {

set $path_info $fastcgi_path_info;

}

try_files $fastcgi_script_name @404php;

fastcgi_param PATH_INFO $path_info;

fastcgi_index index.php;

include fastcgi.conf;

fastcgi_pass unix:/usr/local/var/run/php-fpm.sock;

fastcgi_connect_timeout 60;

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

}

location @404php {

if ($path = /index.php) {

return 404;

}

if ($path ~ ^(.*)(/.+)/index.php$) {

set $path_info $2;

set $path $1/index.php;

rewrite .* $path last;

}

return 404;

}

Rewrite的Flags
last – 基本上都用这个Flag。
break – 中止Rewirte,不在继续匹配
redirect – 返回临时重定向的HTTP状态302
permanent – 返回永久重定向的HTTP状态301
规则:
一般在非根的location中配置rewrite,都是用的break;而根的location使用last比较好,因为如果配置了fastcgi或代理访问jsp文件的话,在根location下用break是访问不到

正则表达式形式的模式匹配,如~*和~

  • ‘~'表示大小写敏感的匹配
  • ‘~*'表示大小写不敏感的匹配(例如:“firefox”字符串可以成功匹配“FireFox”)
  • !~和!~*代表跟后面的正则匹配规则相反的规则,表示不能匹配当前正则表达式规则的字符串执行后面的处理语句
  • 使用-f参数以及!-f参数检测一个文件是否存在
  • 使用-d参数以及!-d参数检测一个目录(路径)是否存在
  • 使用-e以及!-e检测是否存在一个文件,一个目录或者一个符号链接。
  • 使用-x以及!-x检测一个文件是否可执行
  • 正则表达式部分可以嵌套,表达式后面的部分如果用到前面的表达式可以用 $1 到$9 变量表示。
收藏 (0) 打赏

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

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

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

快网idc优惠网 建站教程 Nginx的伪静态配置中使用rewrite来实现自动补全的实例 https://www.kuaiidc.com/53920.html

相关文章

发表评论
暂无评论