{n,m} :重复 n 至 m 次
[]:定义匹配的字符范围
[c] :匹配单个字符 c
[az]:匹配任意小写字母az
[az]:匹配任意小写字母az
[a-zA-Z0-9] :匹配所有大写和小写字母或数字
():表达式的起始和终止位置
|:或运算符
从功能上看,它们好像有些类似,都可以实现跳转。主要区别在于,它改变了同一域名内获取资源的路径,但针对一类路径进行访问控制或者反向代理,还可以传递到其他机器。
:重写访问的域名或者域名的URL路径地址
:对访问路径进行访问控制或者代理转发
2.1. 大致可以分为三类
完全匹配:= / {…}
常规匹配:/{…}
正则表达式匹配:~/{…}
2.2 常见匹配规则
=:对普通字符进行精确匹配,即完全匹配。
^~:表示普通字符匹配,使用前缀匹配,匹配成功则不再进行其他匹配。
~:区分大小写匹配。
~* :不区分大小写的匹配。
!~:区分大小写的匹配否定。
!~* :不区分大小写的匹配。
2.3. 优先级:
第一个完全匹配 =
其次,前缀匹配^~
第二个是正则匹配或*按文件顺序
然后匹配前缀匹配,不做任何修改
最后交给/通用匹配
2.4 示例
(1)= / {}
= 表示精确匹配 /。主机名后面不能跟任何字符串。例如访问 / 和 /data,/ 会匹配,但 /data 不会匹配。例如 = /abc 只会匹配 /abc,而不会匹配 /abc/ 或 /abcd。如果 /abc 是 /abc,则会匹配 /abc、/abcd/ 和 /abc/。
(2)/{}
因为所有地址都以 / 开头,所以此规则将匹配所有请求。例如,如果您访问 / 和 /data,则 / 将匹配,并且 /data 也将匹配。但是,如果它后面跟着正则表达式,则将首先匹配最长的字符串(最长匹配)。
(3) // {}
匹配任何以//开头的地址。匹配后继续搜索其他地址。
仅当没有其他正则表达式匹配时才会使用这个。
(4) //abc { }
匹配任意以//abc开头的地址,匹配后继续查找其他地址。
仅当没有其他正则表达式匹配时才会使用这个。
(5)^~ // {}
匹配以 // 开头的任何地址。匹配后,停止搜索正则表达式并使用此表达式
(6)~* \ . (gif|jpg|jpeg)${}
匹配所有以 gif、jpg 或 jpeg 结尾的请求
但是,所有在//下请求的图片都会被^~//处理,因为^~的优先级更高,所以无法达到这个正则表达式。
(7) //abc {}
最长的字符匹配 //abc,优先级最低。如果继续搜索其他字符,会发现 ^ 和
(8)〜//abc {}
匹配以 //abc 开头的字符,优先级第二高。只有删除 ^~ // 后才会使用这个:
(9) //abc/1.html {}
匹配文件//abc/1.html。与正则表达式~//abc/1.html相比,该正则表达式的优先级更高。
优先事项摘要:
( = 完整路径) > ( ^~ 路径) > ( ~ ,~* 常规序列) > ( 部分起始路径) > ( /)
匹配
首先看优先级: => ^~ > , * > > /
优先级相同:正则表达式按照上下顺序,顶部优先;通用表达式按照长度优先,最长匹配优先
精确,前缀,正则,通用都不匹配,最后看通用匹配
2.5. 在实际的网站使用中,至少有三种匹配的规则定义
第一条强制性规定
直接匹配网站根,通过域名访问网站首页比较频繁,使用这个可以加快处理速度,比如官网。
可以是静态主页,也可以直接转发到后端应用服务器
= / {
根html;
索引 index.html index.htm;
第二条强制规则是处理静态文件请求,这是 nginx 作为 HTTP 服务器的强项。
有两种配置模式,目录匹配或后缀匹配,你可以选择其中一种或两种都使用
^~ // {
根 ///;
~* \ . (html|gif|jpg|jpeg|png|css|js|ico)${
根//资源/;
第三条规则是通用规则,例如将.php或者.jsp后缀的动态请求转发到后端应用服务器。
非静态文件请求默认为动态请求
/ {
;
3. Nginx 概述
功能就是利用nginx提供的全局变量或者自己设置的变量,结合正则表达式和标签来实现URL重写和重定向。例如:
3.1、跳转场景3.2、跳转实现3.3、执行顺序如下:执行块中的指令。执行匹配的指令。执行选中的指令。3.4、语法格式:
rewrite [flag] ;
regex:正则匹配规则。
:表示跳转后的内容。
flag:支持的标志。
3.5、标志说明
last:匹配完本条规则后,继续向下匹配新的URL规则,一般用在and if中。
break:匹配完成后终止该规则,不再匹配其他规则。一般用在 中。
:返回302临时重定向,浏览器地址将显示跳转后的URL地址。
:返回301永久重定向,浏览器地址栏将显示跳转后的URL地址。
4.Nginx基本操作 4.1.根据域名重定向
现在公司旧域名因为业务需要发生了变更,需要更换新域名,但是旧域名不能废除,需要跳转到新域名,后续参数不变。
vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.test.com; #域名修改
charset utf-8;
access_log /var/log/nginx/www.test.com.access.log; #日志修改
location / {
if ($host = 'www.test.com'){ #$host为rewrite全局变量说好的
rewrite ^/(.*)$ http://www.lisi.com/$1 permanent;
}
root html;
index index.html index.htm;
}
}
echo "192.168.163.10 www.lisi.com www.test.com" >> /etc/hosts
systemctl restart nginx
浏览器输入模拟访问
会跳转到,查看元素可以看到返回了301,即实现了永久重定向,并且域名后面的参数也跳转正常。
4.2. 根据客户端IP进行访问重定向
今天公司业务新版本上线,要求所有IP访问任何内容都要显示固定维护页面,只有公司IP:192.168.153.230才能正常访问。
vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.test.com;
charset utf-8;
access_log /var/log/nginx/www.test.com.access.log;
#设置是否合法的IP标记;设置变量$rewrite,变量值为boole值true
set $rewrite true;
#判断是否为合法IP;当客户端IP为192.168.153.230时,将变量值设为false,不进行重写
if ($remote_addr = "192.168.153.230"){
set $rewrite false;
}
#除了合法IP,其它都是非法IP,进行重写跳转维护页面
#当变量值为true时,进行重写
if ($rewrite = true){
#重写在访问IP后边插入/weihu.html,例如192.168.184.11/weihu.html
rewrite (.+) /weihu.html;
}
location = /weihu.html {
#网页返回/var/www/html/weihu.html的内容
root /var/www/html;
}
location / {
root html;
index index.html index.htm;
}
}
mkdir -p /var/www/html/
echo "As server maintenance, please visit later, thank you.
" > /var/www/html/weihu.html
echo "192.168.153.230 www.test.com" >> /etc/hosts
systemctl restart nginx
浏览器访问
4.3.根据旧域名跳转到新域名,并在其后添加目录
现在你需要将此域名下的所有访问重定向到
vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name lisi.test.com;
charset utf-8;
access_log /var/log/nginx/lisi.test.com.access.log;
#添加;这里的$1为位置变量,代表/post
location /post {
rewrite (.+) http://www.test.com/lisi$1 permanent;
}
location / {
root html;
index index.html index.htm;
}
}
mkdir -p /usr/local/nginx/html/lisi/post
echo "this is 1.html" > /usr/local/nginx/html/lisi/post/1.html
echo "192.168.153.230 lisi.test.com www.test.com" >> /etc/hosts
systemctl restart nginx.service
使用浏览器访问
http://lisi.test.com/post/1.html 跳转到 http://www.test.com/lisi/post/1.html
4.4. 根据参数匹配跳转
现在访问 (100|200)-100 (任意数字).html 跳转到该页面。
vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.test.com;
charset utf-8;
access_log /var/log/nginx/www.test.com.access.log;
if ($request_uri ~ ^/100-(100|200)-(\d+).html$) {
rewrite (.+) http://www.test.com permanent;
}
location / {
root html;
index index.html index.htm;
}
}
echo "192.168.153.230 www.test.com" >> /etc/hosts
systemctl restart nginx
浏览器访问
http://www.test.com/100-200-100.html 或
http://www.test.com/100-100-100.html 跳转到http://www.test.com页面。
4.5. 根据目录中所有以php结尾的文件跳转
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。