前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx URL重写

Nginx URL重写

作者头像
剧终
发布2020-12-31 15:06:58
1K0
发布2020-12-31 15:06:58
举报
文章被收录于专栏:Linux学习日志Linux学习日志

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;
 }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • rewite 规则作用
  • rewrite 语法
  • flag 参数
    • last与break的区别
      • redirect与permanent的区别
      • rewrite 日志
      • 实例
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档