nginx rewrite(重定向)

这篇具有很好参考价值的文章主要介绍了nginx rewrite(重定向)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、什么是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;
}

nginx rewrite(重定向)nginx rewrite(重定向) 

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;
}

nginx rewrite(重定向)

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;
                }

nginx rewrite(重定向)nginx rewrite(重定向)

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;
                }

nginx rewrite(重定向)nginx rewrite(重定向) 

 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;
                }

nginx rewrite(重定向)nginx rewrite(重定向)

七、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" 进行重写

}文章来源地址https://www.toymoban.com/news/detail-502246.html

到了这里,关于nginx rewrite(重定向)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用 Nginx 将 HTTP 重定向到 HTTPS

    HTTP 流量在 80 号端口被监听。这里我们将全部 HTTP 的流量都永久重定向到 HTTPS(301)。重定向时,保留原有的主机(host)和请求 URI。 注意,这里的服务器名字(server name)是个通配符_:也就是无论 URL 中包含什么域名,当请求到达 Nginx 服务器以后,都会被重定向到 HTTPS。比

    2024年02月22日
    浏览(42)
  • nginx rewrite 用法,用rewrite去除URL中的特定参数

    日常服务中经常会用Nginx做一层代理转发,把Nginx当做前置机 比如,以下配置: 这里的rewrite 就是为了去除URL中的/apis,实际的后端api中是没有这个参数的,但是为了做到在Nginx转发请求,前端需要加上这个参数,以便于区别 比如前端的请求地址是 那么实际上经过Nginx转发后请求

    2024年02月05日
    浏览(40)
  • Nginx服务之Rewrite

    目录 一、Rewrite实际场景 1、Nginx跳转需求的实现方式 2、rewrite放在server{},if{}, location{}段中 3、对域名或参数字符串 二、Nginx 正则表达式 三、Rewrite命令 四、Location 分类 1、分类  2、正则匹配的常用表达式 3、location 优先级 4、Nginx在实际网站中至少有三个匹配规则定义 4.1第

    2024年02月14日
    浏览(40)
  • Nginx rewrite

    目录 一、location 1.location 匹配规则介绍 2. 实际网站使用中匹配规则 2.1第一个必选规则 2.2第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项 2.3第三个规则就是通用规则 3.location 匹配规则演示 2.1一般前缀匹配 2.2正则匹配 2.3正则前缀匹配 2.4精准匹配 二、re

    2024年02月07日
    浏览(28)
  • Nginx Rewrite详解

    目录 一、Rewrite跳转场景 二、Rewrite跳转实现 三、Rewrite实际场景 1.nginx跳转需求的实现方式: 2.rewrite放在server{},if{},location{}段中 3.对域名或参数字符串 四、Rewrite正则表达式 五、Rewrite命令/语法格式 六、Location分类 1. location 大致可以分为三类: 2.location 常用的匹配规则:

    2024年02月07日
    浏览(37)
  • Nginx Rewrite的应用

    目录 一、Nginx Rewrite 二、Rewrite的功能  1.Rewrite  跳转场景 2.Rewrite  跳转实现 3.Rewrite  实际场景 4.Rewrite  正则表达式 5.Rewrite  命令/语法格式 6.location  分类 7.location  优先级 8.Rewrite和location比较 9.根据以上了解,小案例来操作实现我们在企业跳转案例 三、Rewrite  跳转场景

    2024年02月12日
    浏览(49)
  • 8.Nginx Rewrite

    从功能看rewrite和location似乎有点像,都能实现跳转。 主要区别在于rewrite是在同一域名内更改获取资源的路径,而location是对一类路径做控制访问或反向代理,还可以proxy_pass到其他机器 rewrite对访问的域名或者域名内的URL路径地址重写 location对访问的路径做访问控制或者代理转

    2024年02月08日
    浏览(33)
  • Nginx重写功能rewrite

    目录 一、Rewrite简单介绍 1、Rewrite的概述 2、Rewrite跳转场景 3、URI、URL、URN 4、Rewrite跳转实现 5、Rewrite实际场景  6、Nginx正则表达式 7、Rewrite执行顺序 二、location简单介绍 1、location的分类 2、location 常用的匹配规则 3、location的优先级 4、location示例说明 5、实际网站使用中,至

    2024年02月08日
    浏览(39)
  • Nginx Rewrite(重写跳转)

    rewrite功能: 使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标记位实现URL重写以及重定向。 比如: 更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。 rewrite只能放在server{},location{},if{}中,并且默

    2024年02月03日
    浏览(35)
  • Nginx Rewrite 重写跳转

    rewrite功能: 使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标记位实现URL重写以及重定向。 比如: 更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。 rewrite只能放在server{},location{},if{}中,并且默

    2024年02月11日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包