rewite 规则作用
代码语言:javascript
复制Rewrite规则可以实现对url的重写,以及重定向
--作用场景
URL访问跳转,支持开发设计,如页面跳转,兼容性支持,展示效果等
SEO优化
维护:后台维护、流量转发等
安全
rewrite 语法
代码语言:javascript
复制rewrite <regex> <replacement> [flag];
关键字 正则 替代内容 flag标记
--解释
关键字 其中关键字error_log不能改变
正则 perl兼容正则表达式语句进行规则匹配
替代内容 将正则匹配的内容替换成replacement
flag标记 rewrite支持的flag标记
flag 参数
代码语言:javascript
复制last 停止rewrite检测[如果没有匹配到,会继续向下匹配]
break 停止rewrite检测[如果没有匹配到,则不再向下匹配,直接返回结果404]
redirect 返回302临时重定向,地址栏会显示跳转后的地址
permanent 返回301永久重定向,地址栏会显示跳转后的地址
last与break的区别
代码语言:javascript
复制last和break一样,它们都会终止此'location'中其他它rewrite模块指令的执行,但是'last'立即发起新一轮的 'location'匹配,而'break'则不会
代码语言:javascript
复制--'last'参数
root@linux:/# vim /usr/local/nginx/conf.d/www.conf
server {
listen 80;
root /www;
location / {
rewrite ^/www/(.*.html)$ /v1/$1 last;
rewrite ^/v1/(.*.html)$ /v2/$1 break;
}
}
--验证,发现访问URL'/www/index.html'会被重写为'/v2/index.html’
root@linux:/# curl http://172.16.0.1/www/index.html
my name v2
--请求流程
1:访问'/www/index.html'匹配规则成功,所以'/www/index.html'会被重写为'/v1/index.html',发现'flag'为'last',会重新以'/v1/index.html'进行匹配
2:以'/v1/index.html'重新开始匹配第一条rewrite规则,不符合规则不可以被匹配到,继续向下执行
3:以'/v1/index.html'匹配第二条rewrite规则符合,会被重写为'/v2/index.html'
4:以'/v2/index.html'重新开始匹配第一条rewrite规则,不符合规则不可以被匹配到,继续向下执行
5:以'/v2/index.html'重新开始匹配第二条rewrite规则,不符合规则不可以被匹配到,继续向下执行
6:如果后面没有了rewrite规则,此时就会去'/www/v2/'下找相应的资源对应的资源响应
代码语言:javascript
复制--'break'参数
root@linux:/# vim /usr/local/nginx/conf.d/www.conf
server {
listen 80;
root /www;
location / {
rewrite ^/www/(.*.html)$ /v1/$1 break;
rewrite ^/v1/(.*.html)$ /v2/$1 last;
}
}
--验证
root@linux:/# curl http://172.16.0.1/www/index.html
my name v1
--请求流程
1:访问'/www/index.html'匹配第一条rewrite规则成功,所以'/www/index.html'会被重写为'/v1/index.html',发现'flag'为'break',此时就会去'/www/v1/'下找相应的资源对应的资源响应,不再向下匹配
redirect与permanent的区别
代码语言:javascript
复制永久重定向就表示该网址已经搬迁到一个永久居住的'新家'
临时重定向就表示该网址搬迁到了一个临时居住的'公寓'
代码语言:javascript
复制--'redirect'参数
--请求的'URL'只要被'redirect'规则匹配到了就立马响应浏览器重定向,后面的规则都不会执行
root@linux:/# vim /usr/local/nginx/conf.d/www.conf
server {
listen 80;
root /www;
location / {
rewrite ^/www/(.*.html)$ http://172.16.0.14 redirect;
rewrite ^/www/(.*.html)$ /v2/ last;
}
}
--验证,'-L'选项表示跟随链接重定向
root@linux:/# curl -L 172.16.0.1/www/index.html
hello my ip is '172.16.0.134'
代码语言:javascript
复制--'permanent'参数
--请求的'URL'只要被'permanent'规则匹配到了就立马响应浏览器重定向,后面的规则都不会执行
root@linux:/# vim /usr/local/nginx/conf.d/www.conf
server {
listen 80;
root /www;
location / {
rewrite ^/www/(.*.html)$ http://172.16.0.14 permanent;
rewrite ^/www/(.*.html)$ /v2/ last;
}
}
--验证
root@linux:/# curl -L 172.16.0.1/www/index.html
hello my ip is '172.16.0.134'
rewrite 日志
代码语言:javascript
复制--编辑主配置文件,在'http{}'内添加下面的内容
root@linux:/# vim /usr/local/nginx/conf/nginx.conf
http {
.................省略
error_log /usr/local/nginx/logs/error.log notice;
rewrite_log on;
}
--重启nginx
root@linux:/# nginx -s reload
--访问网页
root@linux:/# curl -L 172.16.0.1/www/index.html
hello my ip is '172.16.0.134'
--查看日志
root@linux:/# cat /usr/local/nginx/logs/error.log
2020/12/23 22:33:13 [notice] 29613#0: *24 rewritten redirect: "http://172.16.0.14", client: 172.16.0.1, server: , request: "GET /www/index.html HTTP/1.1", host: "172.16.0.1"
实例
代码语言:javascript
复制--用于切换维护页面场景
server {
listen 80;
root /www;
location / {
rewrite ^(.*)$ /maintain.html break;
}
}
代码语言:javascript
复制--隐藏式跳转'浏览器URL跳转后保持不变'
--请求URI'/www/index.html'转到h'ttp://172.16.0.14/admin'页面
server {
listen 80;
root /www;
location /www {
rewrite ^/www/index.html /admin break;
proxy_pass http://172.16.0.14;
}
}
代码语言:javascript
复制--'http'访问强制跳转到'https'
server {
listen 80;
root /www;
location / {
rewrite ^/(.*)$ https://$host$1 permanent;
}
}