I .重写语法指令语法:重写正则表达式替换[标志]
默认值:无
应用程序位置:服务器,位置,如果
正则表达式是PCRE风格的。如果正则表达式与URI匹配,那么URI将被替换为替换项,即新的URI。如果在相同的重写上下文中有多个这样的规则,则匹配将按照重写指令出现的顺序依次进行。匹配一个后,匹配不会终止,而是继续匹配,直到返回最后一个。如果想停止继续向下匹配,可以使用第三个参数标志。
如果新URI字符中有任何关于协议的内容,如http://或https://等。进一步的处理被终止并直接返回到客户端302。
如果返回30x,浏览器会根据这个状态码和位置响应头再次请求,然后就可以得到想要的响应结果。但是如果没有返回30x状态码,那么跳转是内部的,浏览器不跳转也能得到。
重写是实现URL重定向的重要指令。它根据regex(正则表达式)匹配内容,并跳转到替换,末尾有标志。
示例:
重写^/(.*)http://www.baidu.com/永久居民;#匹配成功后跳转到百度,执行永久301跳转常用正则表达式:
描述\将后面的字符标记为特殊字符或文字字符或向后引用$匹配输入字符串的开始位置*匹配前一个字符零次或多次+匹配前一个字符一次或多次?零次或一次匹配前面的字符。匹配除以& ldquo\ n & rdquo外面的所有单个字符(模式)匹配括号中patternrewrite的最后一个参数。
符号描述最后在此规则匹配后,继续向下匹配新的位置URL规则。匹配后,打破此规则终止。重定向返回302临时重定向parmanent返回301永久重定向。
第二,应用场景调整用户浏览的网址,看似标准化。为了让搜索引擎收录网站内容,让用户体验更好,网站根据特殊的变量、目录、客户端,更换新的域名并跳转。
三。重写规定了工作原理。重写模块的指令包括break、if、return、rewrite、set等。重写指令按以下顺序执行:
首先,在服务器上下文中顺序执行重写模块指令;如果在服务器端进行重写,内部跳转用新的URL发起,直接匹配位置,服务器端的重写指令不会再执行,然后
-新的URL直接匹配位置
-如果某个位置匹配,那么其中的重写模块指令也会按顺序执行。
-如果再次造成URL重写,再进行一次内部跳转匹配位置,但跳转总次数不能超过10次。
四。标志参数介绍
1.last如果有最后一个参数,则停止处理任何与重写相关的指令,并立即开始与替换的新URI匹配的下一轮位置。
如果位置重写也使用last,它将使用新的URI重新发起内部重定向,并再次匹配位置,新的URI将很可能再次匹配与旧的URI相同的位置,因此将发生无限循环。当循环进行到第10次时,Nginx会终止这样一个无意义的循环,并返回500错误。这需要特别注意。
2.break停止处理任何与重写相关的指令,就像break指令本身一样。
相同的最后一个断点是立即停止执行当前上下文的所有重写模块指令;不同的是,最后一个参数立即用新的URI搜索新的位置,而break不搜索新的位置,直接用这个新的URI来处理请求,避免重复re-wit。因此,last用于服务器上下文,break用于位置上下文。
3.如果redirectreplacement不包含该协议,并且仍然是新的URI,那么将使用与新的URI匹配的位置来处理该请求,并且不会返回30x跳转。但是redirect参数可以使这种情况也返回30x(默认302)状态码,就像新的URI包含http://和https://等一样。这样,当浏览器看到302时,就会发出另一个请求,而真正返回响应结果的正是这个第二个请求。
4.parmanent与redirect参数相同,只是直接返回301永久重定向。
尽管URI是新的,但是需要当前请求的方案以及由server_name_in_redirect和port_in_redirect指令确定的主机和端口来拼接一个完整的URL。
另一个有趣的应用是,如果替换包含请求参数,旧URI中的请求参数也会在替换后默认拼接为新URI。如果不想这么做,可以在替换的最后加上?。
示例:
重写^/users/(.*)$ /show?user=$1?最后;这是新的URI还是/秀?用户=xxx
但如果不加个问号:
重写^/users/(.*)$ /show?user = $ 1 last新URI正在上演吗?user = $ 1 & ampxxx=xxx .其中xxx=xxx是旧URI携带的请求参数。
5.当示例服务器{ # visitors/last . html时,页面内容被重写为/index.html,下面的位置匹配继续进行。浏览器地址栏的URL地址保持不变rewrite/last . html/index . html last;#访问/break.html时,页面内容被重写为/index.html,后续匹配停止。浏览器地址栏的URL地址保持不变;rewrite/break . html/index . html break;#访问/redirect.html时,页面直接定向到/index.html,浏览器地址URL跳转到index.html rewrite/redirect . html/index . html redirect;#访问/permanent.html时,页面直接定向到/index.html 301,浏览器地址URL跳转到index.html rewrite/permanent . html/index . html permanent;# put /html/*。html = & gt/post/*。html,301定向重写/html/(。+?).html$ /post/$1.html永久;# put/search/key = >: /search.html?关键词=关键重写^/search\/([^\/]+?)(\/|$) /search.html?关键字=$1永久;#将当前域名的请求跳转到新域名,域名改变但路径不变重写/(。*)http://www.jd.com/$1永久居民;}
综上所述,这篇关于Nginx中重写的文章就介绍到这里。关于Nginx重写地址重定向的更多信息,请搜索主机频道zhujipindao之前的文章。或者继续浏览下面的相关文章。希望大家支持主机频道zhujipindao。以后多来com!
评论前必须登录!
注册