大家好,今天来为大家解答rewrite是什么意思?用法、例句这个问题的一些问题点,包括nginx中rewrite用法也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~
rewrite功能就是使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。
rewrite只能放在server{},location{},if{}中,并且只能对域名后边的除去传递的参数外的字符串起作用,例如http://seanlook.com/a/we/index.PHP?id=1&u=str只对/a/we/index.php重写。语法rewriteregexreplacement[flag];
如果相对域名或参数字符串起作用,可以使用全局变量匹配,也可以使用proxy_pass反向代理。
表明看rewrite和location功能有点像,都能实现跳转,主要区别在于rewrite是在同一域名内更改获取资源的路径,而location是对一类路径做控制访问或反向代理,可以proxy_pass到其他机器。很多情况下rewrite也会写在location里,它们的执行顺序是:
3、执行选定的location中的rewrite指令
提示:如果其中某步URI被重写,则重新循环执行1-3,直到找到真实存在的文件;循环超过10次,则返回500InternalServerError错误。
rewrite语法格式:rewriteregexreplacement[flag];
last#本条规则匹配完成后,继续向下匹配新的locationURI规则
break#本条规则匹配完成即终止,不再匹配后面的任何规则
redirect#返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent#返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
例1:rewrite^/(.*)http://www.test.com/$1permanent;
rewrite为固定关键字,表示开始进行rewrite匹配规则
regex部分是^/(.*),这是一个正则表达式,匹配完整的域名和后面的路径地址
replacement部分是http://www.test.com/$1,$1是取自regex部分()里的内容。匹配成功后跳转到的URL。
flag部分permanent表示永久301重定向标记,即跳转到新的http://www.test.com/$1地址上
将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\\n”匹配一个换行符,而“\\$”则匹配“$”
小括号()之间匹配的内容,可以在后面通过$1来引用,$2表示的是前面第二个()里的内容。正则里面容易让人困惑的是\\转义特殊字符。
对给定的条件进行判断。如果为真,大括号内的rewrite指令将被执行,if条件可以是如下任何内容:当表达式只是一个变量时,如果值为空或任何以0开头的字符串都会当做false
#如果UA包含"MSIE",rewrite请求到/msid/目录下
#如果cookie匹配正则,设置变量$id等于正则引用部分
if($http_cookie~*"id=([^;]+)(?:;|$)"){
#如果提交方法为POST,则返回状态405(Methodnotallowed)。return不能返回301,302
#限速,$slow可以通过set指令设置
#如果请求的文件名不存在,则反向代理到localhost。这里的break也是停止rewrite检查
#如果querystring中包含"post=140",永久重定向到example.com
rewrite^http://example.com/permanent;
location~*\\.(gif|jpg|png|swf|flv)${
valid_referersnoneblockedwww.jefflei.comwww.leizhenfang.com;
这个变量等于请求行中的参数,同$query_string
请求主机头字段,否则为服务器名称
客户端请求的动作,通常为GET或POST
已经经过AuthBasicModule验证的用户名
当前请求的文件路径,由root或alias指令与URI请求生成
请求使用的协议,通常是HTTP/1.0或HTTP/1.1
服务器地址,在完成一次系统调用后可以确定这个值
包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”
不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”
http://localhost:88/test1/test2/test.php
$request_uri:http://localhost:88/test1/test2/test.php
$document_uri:/test1/test2/test.php
$request_filename:/var/www/html/test1/test2/test.php
本文转载地址:http://blog.51cto.com/longlei/2148205
文章到此结束,如果本次分享的rewrite是什么意思?用法、例句和nginx中rewrite用法的问题解决了您的问题,那么我们由衷的感到高兴!