设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间09 现在时间09 缓存数据 现在不玩命,将来命玩你;现在不努力,未来不给力。今天,早安!

现在不玩命,将来命玩你;现在不努力,未来不给力。今天,早安!

查看: 831|回复: 3

nginx 网页匹配跳转rewrite、location的具体使用

[复制链接]

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
27
主题
23
精华
0
金钱
83
积分
50
注册时间
2023-10-3
最后登录
2025-5-23

发表于 2024-5-29 10:20:29 来自手机 | 显示全部楼层 |阅读模式
目录


  • 常用的Nginx 正则表达式
  • rewrite和location的区别
  • location

    • location 大致分为三类
    • location 常用的匹配规则
    • location 优先级
    • location示例:

  • rewrite

    • rewrite默认的地址重写
    • rewrite针对全域名路径重写
    • rewrite跳转实现
    • rewrite 执行顺序如下:
    • rewrite语法:
    • rewrite基于域名的跳转
    • rewrite 基于客户端ip访问跳转
    • rewrite基于旧域名跳转到新域名后面加目录
    • 基于参数匹配的跳转


常用的Nginx 正则表达式

常用的Nginx 正则表达式
^ :匹配输入字符串的起始位置
$ :匹配输入字符串的结束位置
* :匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”
+ :匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“olll”,但不能匹配“o”
? :匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,”?”等效于”{0,1}”
. :匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,请使用诸如“[.\n]”之                      类的模式
\ :将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\n”匹配一个换行符,而“\$”则匹配“$”
\d :匹配纯数字[0-9]   \s :空白符    \w :任意单词字符包括下划线[A-Za-z0-9_]
{n} :重复 n 次
{n,} :重复 n 次或更多次
{n,m} :重复 n 到 m 次
[] :定义匹配的字符范围
[c] :匹配单个字符 c
[a-z] :匹配 a-z 小写字母的任意一个
[a-zA-Z0-9] :匹配所有大小写字母或数字
() :表达式的开始和结束位置
| :或运算符
从功能看 rewrite 和 location 似乎有点像,都能实现跳转,主要区别在于 rewrite 是在同一域名内更改获取资源的路径,而 location 是对一类路径做控制访问或反向代理,还可以proxy_pass 到其他机器。

rewrite和location的区别


  • rewrite    先对用户的URI访问路径或者域名进行重写,再重定向请求
  • ​location   匹配用户的URL访问路径做页面跳转、访问控制和代理转发

location


location 大致分为三类
  1. 精准匹配:location = / {}
  2. 一般匹配:location / {}
  3. 正则匹配:location ~ / {}
复制代码
location 常用的匹配规则

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

location 优先级

首先精确匹配 =
其次前缀匹配 ^~
其次是按文件中顺序的正则匹配 ~或~*
然后匹配不带任何修饰符的一般前缀匹配
最后是交给 / 通用匹配
优先级总结
  1. 1.(location =)
  2. 2.(location 完整路径)
  3. 3.(location ^~ 路径)
  4. 4.(location ~,~* 正则顺序)
  5. 5.(location 部分起始路径)
  6. 6.(location /)
复制代码
location示例:
  1. 1)location = / {}
  2. =为精确匹配 / ,主机名后面不能带任何字符串,比如访问 / 和 /data,则 / 匹配,/data 不匹配
  3. 再比如 location = /abc,则只匹配/abc ,/abc/或 /abcd不匹配。若 location  /abc,则即匹配/abc 、/abcd/ 同时也匹配 /abc/。

  4. (2)location / {}
  5. 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求 比如访问 / 和 /data, 则 / 匹配, /data 也匹配,
  6. 但后面前缀路径会和最长字符串优先匹配(最长匹配)


  7. (3) /documents/ {}
  8. 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索其它 location
  9. 只有其它 location后面的前缀路径没有匹配到时,才会采用这一条

  10. (4)location /documents/abc {}
  11. 匹配任何以 /documents/abc 开头的地址,匹配符合以后,还要继续往下搜索其它 location
  12. 只有其它 location后面的前缀路径没有匹配到时,才会采用这一条

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

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

  18. (7)location /images/abc {}
  19. 最长字符匹配到 /images/abc,优先级最低,继续往下搜索其它 location,会发现 ^~ 和 ~ 存在

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

  22. (9)location /images/abc/1.html {}
  23. 匹配/images/abc/1.html 文件,如果和正则location ~ /images/abc/1.html 相比,正则优先级更高
复制代码
实际网站使用中,至少有三个匹配规则定义
  1. #第一个必选规则
  2. 直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,比如说官网。
  3. 这里是直接转发给后端应用服务器了,也可以是一个静态首页
  4. location = / {
  5.     proxy_pass http://tomcat_server/;
  6. }

  7. #第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项
  8. 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
  9. location ^~ /static/ {
  10.     root /webroot/static/;
  11. }

  12. location ~* .(html|gif|jpg|jpeg|png|css|js|ico)$ {
  13.     root /webroot/res/;
  14. }

  15. #第三个规则就是通用规则,比如用来转发带.php、.jsp后缀的动态请求到后端应用服务器
  16. 非静态文件请求就默认是动态请求
  17. location / {
  18.     proxy_pass http://tomcat_server;
  19. }
复制代码
rewrite

rewrite概述:

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


  • rewrite只能放在server{},location{},if{}中,并且默认只能对域名后边的除去传递的参数外的字符串起作用

rewrite默认的地址重写

例如 http://www.kgc.com/abc/bbs/index.php?a=1&b=2
只对/abc/bbs/index.php重写。
  1. rewrite默认情况下只对从域名后面的根路径开始到传递参数的?号前面的路径进行重写http://域名/旧url——> httpd://域名/新url    rewrite  正则表达式 /新url
复制代码
rewrite针对全域名路径重写

要加上协议的域名
  1. http://旧域名/url————>http://新域名/url ​rewrite ^/(.*)$ http://新域名/$1  permanent(页面跳转);
复制代码
使用标记位permanent或redirect过程
http://旧域名/url ——rewrite———>http://新域名/url———>浏览器地址栏会改为http://新域名/url 再进行访问-->location匹配url路径  跳转页面

rewrite跳转实现

1.png


rewrite 执行顺序如下:

(1) 执行 server 块里面的 rewrite 指令。 (2) 执行 location 匹配。 (3) 执行选定的 location 中的 rewrite 指令。

rewrite语法:

rewrite <正则表达式><指定替换的内容><flag标记>
flag标记说明:​

  • last :本条规则匹配完成后,继续向下匹配新的​
  • location URI规则,一般用在 server 和 if 中。 ​
  • break :本条规则匹配完成即终止,不再匹配后面的任何规则,一般使用在 location 中。​
  • redirect :返回302临时重定向,浏览器地址会显示跳转后的URL地址。
  • ​permanent :返回301永久重定向,浏览器地址栏会显示跳转后的URL地址。

rewrite基于域名的跳转

现在公司旧域名www.accp.com有业务需求变更,需要使用新域名www.hyh.com代替,但是旧域名不能废除,需要跳转到新域名上,而且后面的参数保持不变。
  1. vim /apps/nginx/conf/nginx.conf
  2. #进入nginx的配置文件里,根据安装路径查找
复制代码
2.png

使用nginx -t检查语法是否出错
3.png

4.png

在该文件下输入此配置,虚拟机ip,旧域名,新域名
5.png
  1.  nginx -s reload重载nginx,去网页上输入http://www.accp.com,就会跳转到hyh.com的域名了
复制代码
6.png


rewrite 基于客户端ip访问跳转

示例:今天公司业务新版本上线,要求所有 IP 访问任何内容都显示一个固定维护页面,只有公司 IP :192.168.116.40访问正常.
vim nginx.conf
7.png

设置html里提供维护页面的值
  1. [root@localhost html]# pwd
  2. /var/www/html
  3. [root@localhost html]# echo '<hi>this is weihu web!<hi>' >weihu.html
  4. [root@localhost html]# ls
  5. weihu.html
复制代码
访问http://www.accp.com,显示如下,则是成功
8.png

我们可以配置一个可以正常访问的主机ip,仅让此主机访问
9.png

在本机打开此网页,可以访问
10.png

如果想不止这台主机
11.png

配置完成后,wq保存,nginx -t,检查nginx是否有语法问题
再systemctl restart nginx.service重启服务
12.png


rewrite基于旧域名跳转到新域名后面加目录
  1. 现在访问的是 http://bbs.kgc.com/post/,现在需要将这个域名下面的访问都跳转到http://www.kgc.com/bbs/post/
复制代码
打开配置文件vim /usr/local/nginx/conf/nginx.conf
13.png

改完后重启,并查看nginx语法是否有误。
14.png

windows本机host文件里也更改
15.png

输入:http://cxk.accp.com/xhz显示:

16.png

输入http://cxk.accp.com/ikun
17.png


基于参数匹配的跳转

现在访问http://www.kgc.com/100-(100|200)-100.html 跳转到http://www.kgc.com页面。
  1. vim /usr/local/nginx/conf/nginx.conf
  2. server {
  3.     listen       80;
  4.     server_name  www.kgc.com;       #域名修改
  5.     charset utf-8;
  6.     access_log  /var/log/nginx/www.kgc.com-access.log  main;

  7.     if ($request_uri ~ ^/100-(100|200)-(\d+).html$) {
  8.         rewrite (.*) http://www.kgc.com permanent;
  9.     }

  10.     location / {
  11.         root   html;
  12.         index  index.html index.htm;
  13.     }
  14. }
复制代码
  1. systemctl restart nginx
复制代码
使用浏览器访问 http://www.kgc.com/100-200-100.html 或 http://www.kgc.com/100-100-100.html 跳转到http://www.kgc.com页面。
18.png

19.png

20.png

21.png

22.png

23.png

$request_uri: 包含请求参数的原始URI,不包含主机名,如: http://www.kgc.com/abc/bbs/index.html?a=1&b=2中的/abc/bbs/index.php?a=1&b=2

  • $uri:这个变量指当前的请求URI,不包括任何参数,如: /abc/bbs/index.html
  • $document_uri: 与$uri相同, 这个变量指当前的请求URI,不包括任何传递参数,如:/abc/bbs/index.html
到此这篇关于nginx 网页匹配跳转rewrite、location的具体使用的文章就介绍到这了,更多相关nginx 网页匹配跳转内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

  • 打卡等级:常驻代表
  • 打卡总天数:30
  • 打卡月天数:0
  • 打卡总奖励:370
  • 最近打卡:2025-04-22 04:00:34
等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
4
精华
0
金钱
422
积分
76
注册时间
2023-1-4
最后登录
2025-4-22

发表于 2024-11-4 22:32:13 | 显示全部楼层
感谢楼主分享。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

  • 打卡等级:无名新人
  • 打卡总天数:2
  • 打卡月天数:0
  • 打卡总奖励:27
  • 最近打卡:2025-04-03 16:00:33
等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
41
积分
8
注册时间
2023-10-31
最后登录
2025-4-3

发表于 2024-11-17 14:32:09 | 显示全部楼层
感谢楼主,顶。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
16
积分
12
注册时间
2022-12-24
最后登录
2022-12-24

发表于 2025-4-20 12:48:31 | 显示全部楼层
顶顶更健康!!!
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼
3楼
4楼

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表