目录

一、什么是rewrite

二、rewrite使用场景

三、rewrite配置语法

四、常用的nginx正则表达式

五、nginx 配置文件里 location 项

1、localtion 作用

2、location 可以分为三类

3、location 的常用匹配规则

4、location 的 优先级与匹配规则

5、location 示例说明

六、案例

七、rewrite总结


一、什么是rewrite

Rewrite及URL重写,主要是实现地址重写,以及重定向,就是把输入Web的请求重定向到其他URL的过程

二、rewrite使用场景

  • URL地址跳转,列入用户访问old.com将其跳转到oldboy.com,或者当用户通过http的方式访问old.com时,将其跳转至https的方式访问oldboy.com。
  • URL伪静态,将动态页面显示为静态页面的一种技术,便于搜索引擎的录入,同时减少动态URL地址对外暴露过多的参数,提升更高的安全性。
  • 搜索引擎SEO优化依赖与URL路径,以便支持搜索引擎录入。
  • 可以调整用户浏览的URL,看起来更规范,合乎开发及产品人员的要求。

三、rewrite配置语法

Syntax:rewrite regex replacement [flag];

Default:–

Context:server,location,if

四、常用的nginx正则表达式

字符 描述
\ 将后面接着的字符标记为一个特殊字符或者一个原义字符或一个向后引用
^ 匹配输入字符串的起始位置
$ 匹配输入字符串的结束位置
* 匹配前面的字符零次或者多次
+ 匹配前面字符串一次或者多次
? 匹配前面字符串的零次或者一次
. 匹配除“\n”之外的所有单个字符

(pattern)

匹配括号内的pattern

五、nginx 配置文件里 location 项

1、localtion 作用

location 用于匹配用户访问的URL,来适用哪一个目录中的资源

2、location 可以分为三类

  • 精准匹配 : location = / {......}
  • 一般匹配 : location / {......}
  • 正则匹配 : location ~ / {.....}

3、location 的常用匹配规则

字符 涵义
= 进行普通字符精确匹配,也就是完全匹配
^~ 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其它 location
~ 区分大小写的匹配
~* 不区分大小写的匹配
!~ 区分大小写的匹配取非
!~* 不区分大小写的匹配取非

4、location 的 优先级与匹配规则

  1. 首先是 精确匹配 =

    eg: location = /test/ { }

  2. 其次是 前缀匹配 ^~\

    eg: location ^~ /test/ { }

  3. 其次是按文件中顺序的正则匹配 ~ 或 ~*

    eg: location ~ /test/ { }

  4. 然后是一般匹配 ,后面不带 / 的匹配

    eg: locaton /test/ { }

  5. 最后是 交给 / 通用匹配

    eg: location / { }

首先看匹配的优先级 精确匹配 > 前缀匹配 > 正则匹配 > 一般匹配 > 通用匹配

当 没有精确匹配,只有前缀匹配,或者 正则匹配 时,同等级的优先级遵循匹配即停止原则。即当都是正则匹配时,哪个localtion 写在配置文件的上面,就匹配哪个

一般匹配,则遵循最长匹配原则,当只有一般匹配符合时,哪个location 匹配的url 最长,则使用哪个。但是,如果有符合规则的精确匹配,前缀匹配,正则匹配,则使用优先级高的。

5、location 示例说明

1)location = / {}
=为精确匹配 / ,主机名后面不能带任何字符串,比如访问 / 和 /data,则 / 匹配,/data 不匹配
再比如 location = /abc,则只匹配/abc ,/abc/或 /abcd不匹配。

2)location / {}
因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求 比如访问 / 和 /data, 则 / 匹配, /data 也匹配,但若后面是正则表达式会和最长字符串优先匹配(最长匹配原则)

3)location /test/ {}
匹配任何以 /test/ 开头的地址,匹配符合以后,还要继续往下搜索其它 location
只有其它 location后面的正则表达式没有匹配到时,才会采用这一条

4)location /test/abc {}
匹配任何以 /test/abc 开头的地址,匹配符合以后,还要继续往下搜索其它 location
只有其它 location后面的正则表达式没有匹配到时,才会采用这一条

5)location ^~ /images/ {}
匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条(匹配即停止原则)

6)location ~* .(gif|jpg|jpeg)$ {}
匹配所有以 gif、jpg或jpeg 结尾的请求
然而,所有请求 /images/ 下的图片会被 location ^~ /images/ 处理,因为 ^~ 的优先级更高,所以到达不了这一条正则

7)location /images/abc {}
最长字符匹配到 /images/abc ,如果只有一般匹配,则会使用它,但时由于有 正则匹配和前缀匹配,而一般匹配优先级最低,继续往下搜索其它 location,会发现 ^~ 和 ~ 存在

8)location ~ /images/abc {}
匹配以/images/abc 开头的,优先级次之,只有去掉 location ^~ /images/ 才会采用这一条

9)location /images/abc/1.html {}
匹配/images/abc/1.html 文件,如果和正则 ~ /images/abc/1.html 相比,正则优先级更高

六、案例

1、要求所有ip访问任何内容都显示一个固定的维护页面,只有公司ip:192.168.80.7能正常访问

server {listen       80;server_name  www.ttsuzuka.com;charset utf-8;access_log  /var/log/nginx/www.suzuka.com-access.log;set $rewrite true;if ($remote_addr = "192.168.80.7") {set $rewrite false;
}if ($rewrite = true) {rewrite (.+) /weihu.html;
}location = /weihu.html {root /var/www/html;
}location = / {root   html;index  index.html index.htm;
}

2、 基于旧域名跳转到新域名后面加目录

server {listen  80;server_name bbs.tt.com;charset utf-8;access_log /var/log/nginx/www.suzuka.com-access.log;location /post {rewrite (.+) http://www.tt.com/bbs$1 permanent;
}location / {root   html;index  index.html index.htm;
}

3、 基于参数匹配的跳转

        server {listen  80;server_name bbs.tt.com;charset utf-8;access_log /var/log/nginx/www.suzuka.com-access.log;if ($request_uri ~ ^/100-(100|200)-(\d+).html$) Rewrite (.+) http://www.tt.com permanent;}location / {root   html;index  index.html index.htm;}

4 、基于目录下所有php结尾的文件跳转

server {listen  80;server_name www.tt.com;charset utf-8;access_log /var/log/nginx/www.suzuka.com-access.log;location ~* /upload/.*\.php$ {rewrite (.+) http://www.tt.com permanent;}location / {root   html;index  index.html index.htm;}

 5、基于最普通一条url请求的跳转

server {listen  80;server_name www.tt.com;charset utf-8;access_log /var/log/nginx/www.suzuka.com-access.log;location ~* ^/abc/123.html {rewrite (.+) http://www.tt.com permanent;}location / {root   html;index  index.html index.htm;}

七、rewrite总结

location 用于匹配 用户访问请求的URL ,来使用哪一个目录中的网页资源,

rewrite ....... permanent 修改url 后再次请求访问

rewrite /weihu.html 按照修改域名后的 url 直接跳转到对应的 location

location ~ .... if ($request_uri) {

rewrite 如果对全URL 重写,则重写部分就以http:// 开头,后面跟上重写后的URL。 http://.....

如果不以http://.... 开始重写, 默认只对于域名后的路径重写,对 ?后传递的参数无效如http://www.benet.com/abc/?..... ,则只 对 " abc" 进行重写

}

nginx rewrite(重定向)相关推荐

  1. 常用nginx rewrite重定向-跳转实例

    常用nginx rewrite重定向-跳转实例: 1,将www.myweb.com/connect 跳转到connect.myweb.com rewrite ^/connect$ http://con ...

  2. nginx rewrite php参数,Nginx泛域名解析及Rewrite重定向普通页面及带参数的页面

    静态地址重定向到带参数的动态地址 rewrite "^(.*)/service/(.*)\.html$" $1/service.php?sid=$2 permanent; 带参数的 ...

  3. Fastadmin 等一些thinkphp5 larval的后台框架程序 bootstraptable 自定义js 实现动态列 的实现方法1 ,通过nginx apache rewrite 重定向

    Fastadmin 等一些thinkphp5 larval的后台框架程序 bootstraptable 自定义js 实现动态列 的实现方法1 ,通过nginx apache rewrite 重定向 需 ...

  4. Nginx rewrite规则实现http跳转到https及301永久重定向

    Nginx rewrite规则实现http跳转到https及301永久重定向 环境准备: [root@ubuntu1804 ~]#curl https://linux2022.com -Ik HTTP ...

  5. nginx php 此网页包含重定向循环,详解常用的nginx rewrite重写规则

    本文提供一些常用的rewrite重写规则,用来美化网页的链接.规则里面的$1$2你不知道是怎么来的话,只要记住,第一个()里面的是$1,第二个()里面的是$2. 请求的URL是给人看的,重写后的URL ...

  6. nginx rewrite重写与防盗链配置

    nginx rewrite重写规则与防盗链配置方法 时间:2016-02-04 15:16:58来源:网络 导读:nginx rewrite重写规则与防盗链配置方法,rewrite规则格式中flag标 ...

  7. nginx的重定向,反向代理以及负载均衡

    试验环境: 本次试验中的服务器全用的是CentOS-6.4-x86_64操作系统: nginx服务器地址:192.168.80.10 客户端主机地址:192.168.80.1 软件包下载地址: hea ...

  8. nginx rewrite 参数和例子

    nginx rewrite 参数和例子 推荐参考地址: Mailing list ARChives 官方讨论区 http://marc.info/?l=nginx Nginx 常见应用技术指南[Ngi ...

  9. Nginx安装、默认虚拟主机、Nginx用户认证、Nginx域名重定向

    12.6 Nginx安装 安装包下载到/usr/local/src目录 [root@taoyuan ~]# cd /usr/local/src [root@taoyuan src]# wget htt ...

  10. Nginx Rewrite详解

    Nginx Rewrite详解 引用链接:http://blog.cafeneko.info/2010/10/nginx_rewrite_note/ 原文如下: 在新主机的迁移过程中,最大的困难就是W ...

最新文章

  1. 前腾讯员工不堪房价压力回老家进国企!终于过上了清闲的日子,他又担心这个问题?...
  2. windows命令行安装python3_Python3---windows安装与运行
  3. numpy.matrixlib.defmatrix.matrix写入csv文件
  4. linux基础网络设置
  5. python如何开启多线程_Python如何创建多线程
  6. 分数怎么化成带分数_人教版五年级下册第4单元带分数及把假分数化成整数或带分数教学视频+知识点...
  7. 【牛客 - 317F】小a的子序列(线性dp,tricks)
  8. Linux下细碎温度等的监控与调整
  9. singleflight包原理解析
  10. 保姆级带你深入阅读NAS-BERT
  11. 北交大计算机保密专业,国内12所神秘的保密学院,毕业就是铁饭碗
  12. matlab非线性系统频域标识,基于MATLAB的最小二乘法系统辨识与仿真
  13. 【目标检测】Labelme的改进——海量图片的自动标注
  14. 飞思卡尔智能车----模糊PID算法通俗讲
  15. android桌面小工具,超好用的手机桌面小组件,一键美化桌面,实用又美观
  16. 声纹识别之Alize入门教程(三):I-vector
  17. 7K字面经 | 百度金融、蚂蚁金服、易贷网、金蛋科技等互联网金融公司面试经验...
  18. 大数据收集系统架构图
  19. linux在文件夹压缩,在linux下如何将文件夹压缩成.tgz文件
  20. 参考文献格式字号字体_论文字体字号格式要求是什么?

热门文章

  1. 电源管理芯片:LED驱动电源芯片的计划及面积
  2. Seccon-ctf-2016-pwn-cheer_msg 题解
  3. facebook Faiss的基本使用示例
  4. 【百度群面】2017年春招-实习产品经理-群面复盘
  5. 【翻译】四种类型的为什么:产品背后的驱动力是什么?
  6. Vue-demo兄弟组件如何传值
  7. Jquery基本教程(背还是要背的)
  8. 深圳捷迅YL-800MT PE13管脚千万不能悬空
  9. 【求职】瓜子二手车 Java 方向面经
  10. Codeforces Round #143 (Div. 2) (ABCD 思维场)