一、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地址跳转》