(七)nginx rewrite模块

一、Rewrite使用场景

1.URL访问跳转:支持开发设计,页面跳转,兼容性支持,展示效果
2.SEO优化:依赖于url路径,以便支持搜索引擎录入
3.维护:后台维护,流量转发等
4.安全:伪静态,真实动态页面进行伪装

语法:
Syntax: rewrite regex replacement [flag];

//所有请求转发⾄/pages/maintain.html
rewrite ^(.*)$ /pages/maintain.html break;

\	转义字符
#如果访问 index.php结尾页面,则让其跳转到/pages/maintain.html
rewrite	index\.php$	/pages/maintain.html	break;


()	用于于匹配括号之间的内容,	通过$1,$2调用
if	($http_user_agent	~	Chrome){
				rewrite	^(.*)$	/chrome/$1	break;
}
例子:
http://localhost/test.xxx.html 会跳转为 http://localhost/chrome/test.xxx.html

二、Rewrite标记Flag

在这里插入图片描述

2.1 last和break

rewrite1.conf

server {
  listen 80;
  server_name localhost;
  root /soft/code;

  location ~ ^/break{
    rewrite ^/break /test/ break;
  }

  location ~ ^/last{
    rewrite ^/last /test/ last;
  }

  location /test/{
      default_type application/json;
      return 200 '{"status":"success123456"}';
  }

}

在这里插入图片描述
在这里插入图片描述

last 与 break 对比小结:

last会新建立一个请求,请求域名+/test
http://192.168.69.112/last 此时
—> http://192.168.69.112/test

break匹配后不会进行匹配,会查找对应root站点目录下包含/test目录
http://192.168.69.112/break 停止匹配,会去root站点目录找对应的test目录,所以会404
—> http://192.168.69.112/test

在这里插入图片描述

2.2 对比flag中 redirect 与 permanent

注意做此实验前,需要将之前的 rewrite1.conf备份注释掉,否则会有影响

rewrite2.conf

server {
  listen 80;
  server_name localhost;
  root /soft/code;

  location ~ ^/bgx {
    rewrite ^/bgx https://www.baidu.com redirect;
    #rewrite ^/bgx https://www.baidu.com permanent;
  }
}

在这里插入图片描述

在这里插入图片描述

可参考https://blog.csdn.net/fangkang7/article/details/87872894 《【Nginx】第二十二节 redirect跟permanent区别》

三、Rewrite使用场景

要求:
http://192.168.69.112/course/11/22/course_33.html 变成 -->
http:/ /192.168.69.112/course-11-22-course_33.html

echo “test …” > /soft/code/course/11/22/course_33.html

rewrite3.conf

server {
  listen 80;
  root /soft/code;
  index index.html;

  rewrite_log on;
  error_log /srv/nginx/logs/rewrite.log notice;

  rewrite ^/course-(\d+)-(\d+)-(\d+).html /course/$1/$2/course_$3.html break;
}

查看rewrite.log日志进行排查
在这里插入图片描述
效果:
这样重定向写能“隐藏”真实的路径
在这里插入图片描述

小经验

除了通过rewrite日志来排错,调试。可以换个思路,比如将 rewrite (正则) www.baidu.com。
此时访问地址测试,看看你写的地址能否跳百度。 最后再换到目的url。如下

server{
        listen 8823;
        server_name xxx.xxx.252.136;
 
 access_log logs/rewrite.log;

 location / {
  # rewrite ^/(.*) https://www.baidu.com/$1 permanent;
  rewrite ^/(.*) https://xx.xalgx.com.cn/$1 permanent;
 }
}

第二种场景

if	($http_user_agent	~*	Chrome){
				rewrite	^/nginx	http://kt.xuliangwei.com/index.html	redirect;
}

WordPress的rewrite示例:
在这里插入图片描述
在这里插入图片描述

额外补充

在这里插入图片描述
$request_uri 效果为:
在这里插入图片描述

END

也可看其他博主:https://blog.csdn.net/weixin_44903608/article/details/105981273 《个人笔记nginx:rewrite地址跳转》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值