泉州建站模板厂家,如何做好网页设计,天津商业网站建设,做网站制作大概多少钱目录
1.nginx常用的正则表达式
2.location
location 大致可以分为三类
location 常用的匹配规则
location 优先级
location 示例说明
优先级总结
3.rewrite
rewrite功能
rewrite跳转实现
rewrite执行顺序
语法格式
rewrite示例
实例1#xff1a;
实例2#xf…目录
1.nginx常用的正则表达式
2.location
location 大致可以分为三类
location 常用的匹配规则
location 优先级
location 示例说明
优先级总结
3.rewrite
rewrite功能
rewrite跳转实现
rewrite执行顺序
语法格式
rewrite示例
实例1
实例2
实例3
实例4 1.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] 匹配所有大小写字母或数字() 表达式的开始和结束位置 | 或运算符
2.location
location 大致可以分为三类
精准匹配location / {...}一般匹配location / {...} 正则匹配location ~ / {...}
location 常用的匹配规则 进行普通字符精确匹配也就是完全匹配。^~ 表示普通字符匹配。使用前缀匹配。如果匹配成功则不再匹配其它 正则匹配location。~ 区分大小写的匹配。~* 不区分大小写的匹配。!~ 区分大小写的匹配取非。!~* 不区分大小写的匹配取非。
location 优先级
首先精确匹配 其次前缀匹配 ^~其次是按文件中顺序的正则匹配 ~或~*然后匹配不带任何修饰符的一般前缀匹配最后是交给 / 通用匹配
location 示例说明
1location / {}
为精确匹配 / 主机名后面不能带任何字符串比如访问 / 和 /data则 / 匹配/data 不匹配 再比如 location /abc则只匹配/abc /abc/或 /abcd不匹配。若 location /abc则即匹配/abc 、/abcd/ 同时也匹配 /abc/。
2location / {}
因为所有的地址都以 / 开头所以这条规则将匹配到所有请求 比如访问 / 和 /data, 则 / 匹配 /data 也匹配 但后面前缀路径会和最长字符串优先匹配最长匹配
3location /documents/ {}
匹配任何以 /documents/ 开头的地址匹配符合以后还要继续往下搜索其它 location 只有其它 location后面的前缀路径没有匹配到时才会采用这一条
4location /documents/abc {}
匹配任何以 /documents/abc 开头的地址匹配符合以后还要继续往下搜索其它 location 只有其它 location后面的前缀路径没有匹配到时才会采用这一条
5location ^~ /images/ {}
匹配任何以 /images/ 开头的地址匹配符合以后停止往下搜索正则采用这一条
6location ~* \.(gif|jpg|jpeg)$ {}
匹配所有以 gif、jpg或jpeg 结尾的请求 然而所有请求 /images/ 下的图片会被 location ^~ /images/ 处理因为 ^~ 的优先级更高所以到达不了这一条正则
7location /images/abc {}
最长字符匹配到 /images/abc优先级最低继续往下搜索其它 location会发现 ^~ 和 ~ 存在
8location ~ /images/abc {}
匹配以/images/abc 开头的优先级次之只有去掉 location ^~ /images/ 才会采用这一条
9location /images/abc/1.html {}
匹配/images/abc/1.html 文件如果和正则location ~ /images/abc/1.html 相比正则优先级更高
优先级总结
(location 完整路径) (location ^~ 路径) (location ~,~* 正则顺序) (location 部分前缀路径) (location /)
首先看 优先级精确 前缀^~ 正则~,~* 一般 通用/ 在没有精确匹配的时候先看所有前缀的长度取最长匹配的location 如果最长的前缀匹配是带有~~的则匹配直接使用^~的location匹配用户的访问路径并跳转页面如果最长的前缀匹配是不带^~的则会继续看其它的正则匹配 前缀匹配看长度最长的优先匹配正则匹配看上下顺序根据配置文件的配置由上往下依次匹配匹配到即停止 3.rewrite
rewrite功能
rewrite功能就是使用nginx提供的全局变量或自己设置的变量结合正则表达式和标记位实现URL重写以及重定向。比如更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。rewrite只能放在server{},location{},if{}中并且默认只能对域名后边的除去传递的参数外的字符串起作用例如 http://www.kgc.com/abc/bbs/index.php?a1b2 只对/abc/bbs/index.php重写。
rewrite跳转实现
Nginx通过ngx_http_rewrite_module 模块支持URL重写、支持if条件判断但不支持else跳转从一个 location跳转到另一个location循环最多可以执行10次超过后nginx将返回500错误PCRE支持perl兼容正则表达式的语法规则匹配重写模块 set 指令创建新的变量并设其值
rewrite执行顺序 (1) 执行 server 块里面的 rewrite 指令。 (2) 执行 location 匹配。 (3) 执行选定的 location 中的 rewrite 指令 语法格式
rewrite regex replacement [flag];
regex 表示正则匹配规则。
replacement 表示跳转后的内容。
flag 表示 rewrite 支持的 flag 标记。flag标记说明
last 本条规则匹配完成后不终止重写后的url匹配一般用在 server 和 if 中。
break 本条规则匹配完成即终止终止重写后的url匹配一般使用在 location 中。
redirect 返回302临时重定向浏览器地址会显示跳转后的URL地址。
permanent 返回301永久重定向浏览器地址栏会显示跳转后的URL地址。
rewrite示例
实例1
将请求http://bbs.yy.com/abc/index.html的访问跳到http://www.yy.com/bbs/abc/index.html保证原域名后面的url路径不变
location /abc {
rewrite (.) http://www.yy.com/bbs$1 permanent;
} #这里的$1为位置变量代表/abclocation / {
root html;
index index.html index.htm;
}systemctl restart nginx #重启nginx服务 实例2
将请求http://www.yy.com/bbs/index.html跳转到http://www.benet.com/bbs/index.html保证原域名后面的url路径不变
location / {if ($host www.yy.com){rewrite ^/(.*)$ http://www.benet.com/$1 permanent;
}root htmlindex index.html index.htm;
}systemctl restart nginx #重启nginx服务 实例3
将请求http://www.yy.com/abc/123.html 跳转到首页http://www.yy.com
if ($request_uri ~ ^/abc/123.html$) {
rewrite (.) http://www.yy.com permanent;
}$request_uri包含请求参数的原始URI不包含主机名
$uri这个变量指当前的请求URI不包括任何参数
$document_uri与$uri相同这个变量指当前的请求URI不包括任何传递参数systemctl restart nginx #重启nginx服务 实例4
将对http://www.yy.com网站的所有请求跳转到自定义的维护页面
set $rewrite true;
if ($remote_addr 192.168.88.13) {
set $rewrite false;
}if ($rewrite true) {
rewrite (.) /weihu.html;
}location /weihu.html {
root html;
}#只有IP为192.168.88.13能正常访问其他地址都是维护页面systemctl restart nginx #重启服务 自己主机可以正常访问