这篇文章将为大家详细讲解有关Nginx中转发匹配规则的实现方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
<强>一、正则表达式匹配强>
- <李>
~为区分大小写匹配
李> <李>~ *为不区分大小写匹配
李> <李>!~和! ~ *分别为区分大小写不匹配及不区分大小写不匹配
李><强>二、文件及目录匹配强>
- <李>
- f和! - f用来判断是否存在文件
李> <李>- d和! - d用来判断是否存在目录
李> <李>- e和! - e用来判断是否存在文件或目录
李> <李>- x和! - x用来判断文件是否可执行
李><强>三。重写指令的最后一项参数为国旗标记,国旗标记有强>
- <李>
最后相当于apache里面的[L]标记,表示重写。
李> <李>打破本条规则匹配完成后,终止匹配,不再匹配后面的规则。
李> <李>重定向返回302临时重定向,浏览器地址会显示跳转后的URL地址。
李> <李>permanent 301年返回永久重定向,浏览器地址会显示跳转后的URL地址。
李>使用去年和打破实现URI重写,浏览器地址栏不变。
而且两者有细微差别,使用别名指令必须用去年标记;使用proxy_pass指令时,需要使用打破标记.Last标记在本条重写规则执行完毕后,会对其所在服务器{……}标签重新发起请求,而打破标记则在本条规则匹配完成后,终止匹配。
例如:如果我们将类似<代码> URL/照片/123456 代码>重定向到<代码>///照片/12/1234/123456路径。png
代码>
rewrite “/照片/([0 - 9]{2})([0 - 9]{2})([0 - 9]{2})“, rewrite “/道路//照片/1美元/$ 1 $ 2/$ 1 $ 2 $ 3. png",,
<强>四,NginxRewrite规则相关指令强>
<强> 1,打破指令强>
使用环境:服务器位置,如果
该指令的作用是完成当前的规则集,不再处理重写指令。
<强> 2,如果指令强>
使用环境:服务器位置
该指令用于检查一个条件是否符合,如果条件符合,则执行大括号内的语句如果指令不支持嵌套,不支持多个条件,,和| |处理。
<强> 3,返回指令强>
语法:returncode
使用环境:服务器位置,如果
该指令用于结束规则的执行并返回状态码给客户端。
示例:如果访问的URL以“.sh"或“.bash"结尾,则返回403状态码
位置~,。* \。(sh | bash) ?美元 { ,return 403; }
<强> 4,重写指令强>
语法:<代码> rewriteregex替换标记代码>
使用环境:服务器位置,如果
该指令根据表达式来重定向URI,或者修改字符串。指令根据配置文件中的顺序来执行。注意重写表达式只对相对路径有效。如果你想配对主机名,你应该使用如果语句,示例如下:
如果(,host 美元;~ *,www \。(. *),) { ,set host_without_www 美元,1美元; 美元,rewrite ^ (. *), http://host_without_www 1美元永久性的; }
<强> 5,设置指令强>
语法:setvariable价值;
默认值:没有
使用环境:服务器位置,如果
该指令用于定义一个变量,并给变量赋值。变量的值可以为文本,变量以及文本变量的联合。
设置varname 美元;“hello world";
<强> 6,Uninitialized_variable_warn指令强>
语法:uninitialized_variable_warnon |了
使用环境:http服务器,位置,如果
该指令用于开启和关闭未初始化变量的警告信息,默认值为开启。
<强>五。Nginx的重写规则编写实例强>
<强> 1,当访问的文件和目录不存在时,重定向到某个html文件强>
如果(,! -e request_filename 美元) { ,rewrite ^/(. *),美元index.htmllast; }
<强> 2,目录对换/123456/xxxx ====祝辞,/xxxx吗?id=123456 强>
rewrite ^ (\ d +)/(+)/,/2美元? id=1美元,去年,
<强> 3,如果客户端使用的是IE浏览器,则重定向到/IE目录下强>
如果(,http_user_agent 美元;~,MSIE) { ,rewrite ^(. *),美元/ie/1美元,打破; }
<强> 4,禁止访问多个目录强>
位置~,^//(cron |模板) { ,deny ; ,打破; }