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 端应有如下代码,其他部分使用自己的配置:
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 变量表示。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。