您的位置:首页 > 房产 > 建筑 > NGINX之location和rewrite

NGINX之location和rewrite

2024/10/6 16:23:36 来源:https://blog.csdn.net/Vince15dvd/article/details/139426528  浏览:    关键词:NGINX之location和rewrite

一.NGINX常用的正则表达式

二.Location

location作用:对访问的路径做访问控制或者代理转发

1.location 常用的匹配规则:

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

location 大致可以分为三类:
精准匹配:location = / {...}
一般匹配:location / {...}  一般匹配先匹配前缀匹配,最后在用通用匹配 
正则匹配:location ~ / {...}

2.location匹配机制:

优先级:精准匹配 =  >  最长前缀匹配 ^~  >  正则匹配 ~ ~* !~ !~*  >  一般前缀匹配 /XXXX  >  通用匹配 /   

意思:在没有精准匹配的情况下,先看最长的前缀匹配,取最长的前缀匹配,如果最长前缀匹配有^~则不继续看正则匹配了,如果最长前缀匹配没^~就要继续看正则匹配,匹配到及停止。

前缀匹配看长度,最长的优先匹配;正则匹配看上下顺序,根据nginx配置文件的配置由上往下依次匹配,匹配到即停止
案例:

三.Rewrite

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

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

例如 http://www.xy101.com/abc/bbs/index.php?a=1&b=2 只对/abc/bbs/index.php重写。

rewrite跳转实现:
Nginx:通过ngx_http_rewrite_module 模块支持URL重写、支持if条件判断,但不支持else
跳转:从一个 location跳转到另一个location,循环最多可以执行10次,超过后nginx将返回500错误

rewrite 执行顺序如下:

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

rewrite的语法格式:

第一种:

rewrite <regex> <replacement> [flag];
regex :表示正则匹配规则。
replacement :表示跳转后的内容。
flag :表示 rewrite 支持的 flag 标记。

第二种:

$request_uri
if ($全局变量 ~ URL路径正则表达式) {rewrite  正则表达式  重写的地址  [标记位];
}

flag标记说明:

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

案例:

1.将请求http://www.xy101.com/abc/123.html 跳转到首页http://www.xy101.com

location /abc/123.html {root /var/www/htmlrewrite ^/ http://www.xy101.com;
}

22

2.将请求http://www.xy101.com/abc/test.jpg 跳转到http://www.xy101.com/error.png

location /abc/test.jpg {root    /var/www/html;rewrite ^/ error.png permanent;  }

3

3.将请求http://www.xy102.com/discuz/index.php 跳转到http://www.xy101.com/discuz/index.php ,保证原域名后面的uri路径不变 

if ($host = 'www.xy102.com') {rewrite ^/(.*)$ http://www.xy101.com/$1 permanent;}

4.将请求http://discuz.xy101.com/index.php 的访问跳转到http://www.xy101.com/discuz/index.php ,保证原域名后面的uri路径不变。

if ($host = discuz.xy101.com){rewrite ^/(.*)$ http://www.xy101.com/discuz/$1 permanent;}


 5.将对http://www.xy101.com 网站的所有请求跳转到自定义的维护页面或图片,本地可以访问

set $rewrite ture;
if ($remote_addr = "本地主机主机ip") {set rewirte false;
}if (rewrite = true) {rewrite ^/weihu.html;
} location = /weihu.html {root /var/www/html;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com