nginx url rewrite
Rewrite 主要的功能就是实现URL的重写,Nginx的Rewrite规则采用Pcre,perl兼容正则表达式的语法规则匹配,如果需要Nginx的Rewrite功能,在编译Nginx之前,需要编译安装PCRE库。
通过Rewrite规则,可以实现规范的URL、根据变量来做URL转向及选择配置。
- PCRE
PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。
在使用thinkphp时,我们可能会用到url rewrite。例如:
location / {
root html;
if (!-e $request_filename)
{
#地址作为将参数rewrite到index.php上。
#rewrite ^/(.*)$ /index.php/$1;
#若是子目录则使用下面这句,将subdir改成目录名称即可。
rewrite ^/ceshi/(.*)$ /ceshi/index.php/$1;
rewrite ^/myblog/(.*)$ /myblog/index.php/$1;
#rewrite ^/go/(.*)$ /go/index.php/$1;
}
index index.html index.htm;
#如果请求既不是一个文件,也不是一个目录,则执行一下重写规则
}
符号 | 功能 |
---|---|
~ | 区分大小写匹配 |
~* | 不区分大小写匹配 |
!~ | 区分大小写不匹配 |
!~* | 不区分大小写不匹配 |
^ | 以什么开头的匹配 |
^~ | 只需要前半部分匹配 |
= | 完全匹配 |
$ | 以什么结尾的匹配 |
|转义字符 |
nginx正则示例
- /
匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配 ^~ /images/
匹配任何已/images/开头的任何查询并且停止搜索。任何其他正则表达式将不会被测试- ~* .(gif|jpg|jpeg)$
匹配任何已.gif、.jpg 或 .jpeg 结尾的请求
- ~* .(gif|jpg|jpeg)$
nginx正则如何测的$1,2等参数
nginx使用PCRE的正则,所以可以通过以下两种:
实例:
- rewrite内容 rewrite ^/ceshi/(.*)$ /ceshi/index.php/$1;
- 正则内容 /^\/ceshi\/(.*)$/
- 测试匹配 /ceshi/Service/Analysis/show
- https://regex101.com/#pcre
对/^\/ceshi\/(.*)$/
正则的匹配分析
- 使用php代码
$reg = "/^\/ceshi\/(.*)$/";
$testData = "/ceshi/Service/Analysis/show";
preg_match($reg, $testData, $matchs);
print_r($matchs);
#输出
Array
(
[0] => /ceshi/Service/Analysis/show
[1] => Service/Analysis/show
)
通过以上两种工具可以的到,$1=Service/Analysis/show,rewrite后地址为:/ceshi/index.php/Service/Analysis/show;