Nginx rewrite重写的具体使用

 rewrite ^/csr/(.*) /$1 break;

**nginx rewrite ^/csr/(.) /1break;∗∗指令的意思是,‌当请求的URL路径匹配到‘/csr/(.∗)‘时,‌nginx会执行重写操作,‌将匹配到的路径部分(‌即‘(.∗)‘捕获的内容)‌直接替换为‘/$1 break;

** 指令的意思是,‌当请求的URL路径匹配到`^/csr/(.*)`时,‌nginx会执行重写操作,‌将匹配到的路径部分(‌即`(.*)`捕获的内容)‌直接替换为`/$1 break;∗∗指令的意思是,‌当请求的URL路径匹配到‘/csr/(.∗)‘时,‌nginx会执行重写操作,‌将匹配到的路径部分(‌即‘(.∗)‘捕获的内容)‌直接替换为‘/1,‌这里的/$1表示的是第一个括号内匹配的内容,‌即(.)匹配到的内容。‌执行完重写操作后,‌break`指令会停止后续的重写规则的执行。‌

    location /coc/ {
          rewrite ^/coc/(.*) /$1 break;
          proxy_pass      http://coc-pre;
          include         proxy.conf;
        }

具体来说,‌这个指令的作用是将所有以/csr/开头的URL路径重写为不包含/csr/的路径。‌例如,‌如果请求的URL是/csr/example.html,‌经过这个重写规则后,‌URL会被重写为/example.html。‌

这个指令在nginx配置中常用于去除URL中的某些特定部分,‌以便更好地处理请求或提供更简洁的URL结构。‌例如,‌在提供的配置示例中,‌这个重写规则被用于去除URL中的/csr/部分,‌使得后续的代理操作能够正确地处理请求

一、rewrite概述

1、rewrite功能

访问重写 rewrite 是 Nginx HTTP 请求处理过程中的一个重要功能,它是以模块的形式存在于代码中的,其功能是对用户请求的 URI 进行 PCRE 正则重写,然后返回 30× 重定向跳转或按条件执行相关配置。

Nginx服务器利用 ngx_http_rewrite_module 模块解析和处理rewrite请求,此功能依靠 PCRE(perl compatible regular expression),因此编译之前要安装PCRE库,rewrite是nginx服务器的重要功能之一,用于实现URL的重写。

URL的重写是非常有用的功能,比如它可以在我们改变网站结构之后,不需要客户端修改原来的书签,也无需其他网站修改我们的链接,就可以设置为自动访问,另外还可以在一定程度上提高网站的安全性。

2、跳转场景

Rewrite 跳转场景主要包括以下几种

  • 可以调整用户浏览的 URL,看起来更规范,合乎开发及产品人员的需求
  • 为了让搜索引擎搜录网站内容及用户体验更好,企业会将动态 URL 地址伪装成静态地址提供服务
  • 网址换新域名后,让旧的访问跳转到新的域名上。例如,访问京东的 360buy.com会跳转到 jd.com
  • 根据特殊变量、目录、客户端的信息进行 URL 调整等。

二、标准配置指令

1、rewrite日志记录指令

名称rewrite 日志记录指令
指令rewrite_log
作用域http, server, location
默认值off
指令值选项on 或 off
指令说明当指令值为 on 时,rewrite 的执行结果会以 notice 级别记录到 Nginx 的 error 日志文件中

配置样例如下:

1

2

3

http {

   rewrite_log off;

}

 2、未初始化变量告警日志记录指令

名称 未初始化变量告警日志记录指令
指令uninitialized_variable_warn
作用域http, server, location
默认值on
指令值选项on 或 off
指令说明指令值为 on 时,会将未初始化的变量告警记录到日志中

配置样例如下:

1

2

3

http {

    uninitialized_variable_warn off;

}

3、rewrite 指令

通过正则表达式的匹配来改变URI,可以同时存在一个或多个指令,按照顺序依次对URI进行匹配,rewrite主要是针对用户请求的URL或者是URI做具体处理

名称rewrite 指令
指令rewrite
作用域server, location,if
默认值on
指令值选项on 或 off
指令说明对用户的 URI 用正则表达式的方式进行重写,并跳转到新的 URI

配置样例如下:

1

2

3

http {

    rewrite ^/users/(.*)$  /show?user=$1 last;

}

rewrite 访问重写是通过 rewrite 指令实现的,rewrite 指令的语法格式如下:

1

rewrite regex replacement [flag];

注意:

1) regex 是 PCRE 语法格式的正则表达式。

2) replacement 是重写 URI 的改写规则。当改写规则以"http://""https://"或"$scheme"开头时,Nginx 重写该语句后将停止执行后续任务,并将改写后的 URI 跳转返回客户端。

3) flag 是执行该条重写指令后的操作控制符,操作控制符有如下 4 种:

  • last:执行完当前重写规则跳转到新的 URI 后继续执行后续操作;
  • break:执行完当前重写规则跳转到新的 URI 后不再执行后续操作。不影响用户浏览器 URI 显示;
  • redirect:返回响应状态码 302 的临时重定向,返回内容是重定向 URI 的内容,但浏览器网址仍为请求时的 URI;
  • permanent:返回响应状态码 301 的永久重定向,返回内容是重定向 URI 的内容,浏览器网址变为重定向的 URI。

rewrite将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为表达式指定的新的URI。如果在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查,隐含有循环机制,但不超过10次;如果超过,提示500响应码,[flag]所表示的标志位用于控制此循环机制如果替换后的URL是以http://或https://开头,则替换结果会直接以重定向返回给客户端, 即永久重定向 301。

3.1 正则表达式

符号功能描述
匹配除换行符以外的任意字符
\w匹配字母或数字或下划线或汉字
\s匹配任意的空白符
\d匹配数字    [0-9]   
\b匹配单词的开始或结束
^匹配字付串的开始
$匹配字符串的结束
*匹配重复零次或更多次
+匹配重复一次或更多次
?匹配重复零次或一次
(n)匹配重复n次
{n,}匹配重复n次或更多次
{n,m}匹配重复n到m次
*?匹配重复任意次,但尽可能少重复
+? 匹配重复1次或更多次,但尽可能少重复
?? 匹配重复0次或1次,但尽可能少重复
{n,m}?匹配重复n到m次,但尽可能少重复
{n,}?匹配重复n次以上,但尽可能少重复
\W匹配任意不是字母,数字,下划线,汉字的字符
\S匹配任意不是空白符的字符
\D匹配任意非数字的字符
\B匹配不是单词开头或结束的位置
[^x]匹配除了x以外的任意字符
[^kgc]匹配除了kgc 这几个字母以外的任意字符

三、rewrite模块使用实例

基于域名的跳转

现在公司旧域名www.jiu.com有业务需求变更,需要使用新域名www.xin.com代替,但是旧域名不能废除,需要跳转到新域名上,而且后面的参数保持不变。

第一步:修改主配置文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

vim /usr/local/nginx/conf/nginx.conf

server {

    listen       80;

    server_name www.jiu.com;                                      

    #域名修改  

    charset utf-8;

    access_log  /var/log/nginx/www.jiu.comaccess.log;             

    #日志修改

    location / {                                                   

    #添加域名重定向

        if ($host = 'www.jiu.com'){                                

    #$host为rewrite全局变量,代表请求主机头字段或主机名

        rewrite ^/(.*)$  http://www.xin.com/$1 permanent;       

    #$1为正则匹配的内容,即域名后边的字符串

        }

        root   html;

        index  index.html index.htm;

    }

}

第二步:创建所需目录与文件 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#创建日志文件夹,检查语法

mkdir -p /var/log/nginx

nginx -t

  

#创建网页test目录与文件1.html

mkdir -p /usr/local/nginx/html/test

vim /usr/local/nginx/html/test/1.html

------------------------------------------

<h1 font color=red>

Here is the content of test

<img src="1.jpg"/>

</h1

-------------------------------------------

  

#上传1.jpg图片文件

cd /usr/local/nginx/html/test

rz -E

第三步:添加域名与IP地址映射关系

第四步:网页验证 

1

2

3

4

#打开浏览器输入

www.jiu.com/test/1.html

  

会发现重定向到www.xin.com/test/1.html

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值