【Nginx实战】rewrite规则详解

      Nginx的rewrite功能和apache一样,主要是实现URL地址的重定向。Nginx的rewrite功能是由PCRE软件支持,rewrite模块即 ngx_http_rewrite_module 模块。rewrite机制从某种意义上可以说为了美观或者搜索引起的友好搜索,提高排名等

1、rewrite语法规则

rewrite	regex replacement [flag]

rewrite:rewrite重写的关键字不可省略
regex:这里写的是正则表达式
replacement:这里是替换内容
flag:这里是flag标记

flag标记说明:

flag标记说明
last也就是apache里的(L)标记,表示完成rewrite,URL地址不会改变
break本条规则匹配成功后,会停止匹配,不再匹配后面的规则,URL地址不会改变
redirect返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent返回301永久重定向,浏览器地址栏显示跳转后的URL地址,Nginx返回response状态码301

相关符号说明:

符号说明
*代表前面0或者多个字符
+代表前面1或者多个字符
?代表前面0或1个字符
^代表字符串的开始位置
$代表字符串结束位置
$n代表字符串结束第n个参数
.通配符,代表任何字符

文件目录匹配

参数介绍
-f判断文件是否存在 返回值true为存在
!-f判断文件是否存在 返回值false为不存在
-d判断目录是否存在 返回值true为存在
!-d判断目录是否存在 返回值true为不存在
-e判断文件或目录是否存在 返回值true为存在
!-e判断文件或目录是否存在 返回值true为不存在
-x判断文件是否可执行 返回值true为可执行
!-x判断文件是否可执行 返回值true为不可执行

2、rewrite实例:

  • 实例1  多域名跳转到同一域名
server{
    listen 80;
    server_name www.oyhdo.com oyhdo.com ;
    if($host != 'www.oyhdo.com' ){
        rewrite ^/(.*)$ http://www.oyhdo.com/$1 permanent;
    }
}
  • 实例2  当文件不存在时重定向到指定文件

1、访问test目录下的文件或目录不存在时,则跳转到test2下面的此文件或者目录,跳转后会将URL进行转换:

server{
    listen 80;
    server_name www.oyhdo.com;
    if(!-e $request_filename){
        rewrite  ^/test/(.*)$ http://www.oyhdo.com/test2/$1 permanent;
    }
}

2、访问test目录下的文件或目录不存在时,则重定向到index.html文件,跳转后URl不会进行转换:

server{
    listen 80;
    server_name www.gofor.com;
    if(!-e $request_filename){
        rewrite ^/test/(.*)$ index.html last;
    }
}

3、目录切换,表示将原目录转换成其他目录,【0-9a-z】表示转换后目录名称

server{
    listen 80;
    server_name www.oyhdo.com;
    if(!-e $request_filename){
        rewrite ^/test/([0-9a-z]+)/([0-9a-z]+)/(.*)$ http://www.oyhdo.com/test/$1$2$3 permanent;
    }
}
  • 实例3  匹配用户浏览器代理信息

如下,​​​​​​当匹配到浏览代理为Android和iPhone时进行重定向 test目录下的文件,改变访问的地址

server{
    listen 80;
    server_name www.oyhdo.com;
    if ( $http_user_agent ~* ("Android")|(iPhone)){
        rewrite ^/test/(.*)$ http://www.oyhdo.com/test/$1  permanent;
    }
}

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李维山

帮到你就行 不差钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值