nginx url rewrite之thinkphp示例

来源:互联网 发布:大数据时代案例分析 编辑:程序博客网 时间:2024/06/06 05:58

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;            #如果请求既不是一个文件,也不是一个目录,则执行一下重写规则        }
符号 功能 ~ 区分大小写匹配 ~* 不区分大小写匹配 !~ 区分大小写不匹配 !~* 不区分大小写不匹配 ^ 以什么开头的匹配 ^~ 只需要前半部分匹配 = 完全匹配 $ 以什么结尾的匹配 |转义字符 - `/ `匹配任何查询,因为所有请求都以 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配- `^~ /images/ `不区分大小写匹配任何以/images/开头的任何查询并且停止搜索。任何其他正则表达式将不会被测试- `~* .(gif|jpg|jpeg).gif.jpg.jpeg \.php`区分大小写匹配任何以.php结尾的请求- `~ \.php`区分大小写匹配任何包含.php的请求

nginx正则示例

  • /
    匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配
  • ^~ /images/
    匹配任何已/images/开头的任何查询并且停止搜索。任何其他正则表达式将不会被测试

    • ~* .(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\/(.*)$/正则的匹配分析
ana
- 使用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;

0 0