苹果手机PT游戏网站登陆橘子页面载入失败失败referer missing

卡地狱牛|龙之谷_龙之谷视频_爱拍原创看一看|同人原创_生活随拍视频_爱拍原创萌宠|萌宠_萌宠视频_爱拍原创当前位置: →
→ proxy模块;rewrite,伪静态,d.url跳转;内部重定向;外部重定向;
proxy模块;rewrite,伪静态,d.url跳转;内部重定向;外部重定向;
& 作者及来源: 陳聽溪 - 博客园 &
&收藏到→_→:
摘要: proxy模块;rewrite,伪静态,httpd.url跳转;内部重定向;外部重定向;
"proxy模块;rewrite,伪静态,d.url跳转;内部重定向;外部重定向;"::
# cd /data/src/httpd-2.0.61/modules/proxy/
#&/usr/local/apache2/bin/apxs -c -i -a mod_proxy.c proxy_util.c
# /usr/local/apache2/bin/apxs -c -i -a proxy_http.c&# vi /usr/local/apache2/conf/httpd.conf
===============
rewriteengine on-----&打开rewrite功能
 [nc]-----&忽略大小写
!---------&不是,不等于,否决
^----------&前缀 
&!^--------&前缀不是
%{http_host}--------&匹配条件:用户输入的url中主机名称
^ 字符串开始标志$ 字符串结束标志\n 转义符标志
r[=code](force redirect) 强制外部重定向
r表示正常显示,如果设置成p的话就是隐藏目标地址
&l(last rule) 表明当前规则是最后一条规则,停止分析以后规则的重写。
c(chained with next rule) 与下一条规则关联
&================================
2、能看出下面的规则是做了什么吗?
rewritecond& && %{http_host}& & ^(.+)\.google\.com$
rewriterule&^/([\w]+)/([^-]+)-([^-]+)--([^-]+)-([^-]+)--([^-]+)-([^-]+)--([^-]+-[^-]+--[^-]+-[^-]+--[^-]+-[^-]+)$&/$1/$2=$3&$4=$5&$6=$7&$8&&&[c]&
rewritecond& && %{http_host}& & ^(.+)\.google\.com$
rewriterule&^/([\w]+)/([^-]+)-([^-]+)--([^-]+)-([^-]+)--([^-]+)-([^-]+)$& &&&/service/list\.html\?frontcategoryid=${category-map:$1|0}&$2=$3&$4=$5&$6=$7&city=${city-map:%1|%1}&&&[pt,l]
这个规则是想把-(中划线)转为=,把- -(两条中划线)转为&。
[^-]:^在字符集合符号([])之内表示反向选择,之外表示行首,所以表示不以-开头。
因为$n,n最大为9,所以使用了c,用第二条rewriterule把第一条rewriterule中的最后一个节点,即$8,进行继续转换。
此外,rewrite规则中如果遇到中文,相当有可能会出现乱码问题,因为apache在rewrite时会做一次url解码,这时jk进行请求转发时,就不会再是编码后的字符串了。此种情况,可以在一开始就进行两次编码(encode),或者在接收请求时先用 -8859-1取字节流,再使用uft-8来new string。(new string(str.getbytes(& -8859-1&),&uft-8&))
&=========
描述:在实现了url地址的301跳转后(参见http://oldboy./701),需求部门,又发来要求,要求输入www.etiantian.org出来的内容是www.oldboy.cc的内容,但是地址栏里的地址还要求是www.etiantian.org
实现解答:以上需求可使用apache的proxy功能实现:[安装proxy模块]在apache中添加proxy模块/application/apache/bin/apxs -c -i -a mod_proxy.c proxy_util.c/application/apache/bin/apxs -c -i -a /home/oldboy/tools/httpd-2.2.15/modules/proxy/mod_proxy_http.c
[检查安装的模块]查看apache的配置文件httpd.conf中有以下两行就行了,modules目录下应该也多了两个mod_proxy.so,mod_proxy_http.so模块。loadmodule proxy_module&&&&&&&& modules/mod_proxy.soloadmodule proxy_http_module& modules/mod_proxy_http.so
然后配置httpd-vhost.conf&virtualhost *:80&&&& serveradmin&&&& documentroot "/var/www/oldboy"&&& servername&www.etiantian.org&rewriteengine on&rewritecond %{http_host} ^www.etiantian.org [nc]&rewriterule ^(.*)$&&http://www.oldboy.cc$1& [p]&/virtualhost&提示:其他不相关配置省略。
1) r[=code](force redirect) 强制外部重定向强制在替代字符串加上http://thishost[:thisport]/前缀重定向到外部的url.如果code不指定,将用缺省的302 http状态码。2) f(force url to be forbidden)禁用url,返回403http状态码。3) g(force url to be gone) 强制url为gone,返回410http状态码。4) p(force proxy) 强制使用代理转发。5) l(last rule) 表明当前规则是最后一条规则,停止分析以后规则的重写。6) n(next round) 重新从第一条规则开始运行重写 。7) c(chained with next rule) 与下一条规则关联
如果规则匹配则正常处理,该标志无效,如果不匹配,那么下面所有关联的规则都跳过。
8) t=mime-type(force mime type) 强制mime类型9) ns (used only if no internal sub-request) 只用于不是内部子请求10) nc(no case) 不区分大小写11) qsa(query string append) 追加请求字符串12) ne(no uri escaping of output) 不在输出转义特殊字符例如:rewriterule /foo/(.*) /bar?arg=p1%3d$1 [r,ne] 将能正确的将/foo/zoo转换成/bar?arg=p1=zoo13) pt(pass through to next handler) 传递给下一个处理例如:rewriterule ^/abc(.*) /def$1 [pt] # 将会交给/def规则处理alias /def /ghi14) s=num(skip next rule(s)) 跳过num条规则15) e=var:val(set environment variable) 设置环境变量
&===========================================
/article/ae97a646a7419bbbfd461df7.html
htaccess语法教程apache伪静态规则教程
& &&虽然网上有很多教程,不过发现大部分都是抄袭一个人的,一点都不全,所以我想写一个简单的易于理解的教程,我学习.htaccess是从目录保护开始的,这个也比较简单,网上也有一些可以选择,这儿就不说了,教程从绑定域名到子目录开始,网上也有教程,大部分都是抄袭一个人的,我在这儿解说一下,教程写法是这样的:
rewriteengineon
rewritecond%{http_host}^(www\.)?xxx\.com$
rewritecond%{request_uri}!^/blog/
rewritecond%{request_filename}!-f
rewritecond%{request_filename}!-d
rewriterule^(.*)$/blog/$1
#没有输入文件名的默认到到首页
rewritecond%{http_host}^(www\.)?xxx\.com$
rewriterule^(/)?$blog/index.php[l]
下面我开始解说一下上面的意思:
【rewriteengineon】表示重写引擎开,关闭off,作用就是方便的开启或关闭以下的语句,这样就不需要一条一条的注释语句了。
【rewritecond%{http_host}^(www\.)?xxx\.com$】
这是重写条件,前面%{http_host}表示当前访问的网址,只是指前缀部分,格式是不包括&http://&和&/&,^表示字符串开始,$表示字符串结尾,\.表示转义的.,如果不转义也行,推荐转义,防止有些不支持,?表示前面括号www\.出现0次或1次,这句规则的意思就是如果访问的网址是或者就执行以下的语句,不符合就跳过。
【rewritecond%{request_uri}!^/blog/】
也是重写条件,%{request_uri}表示访问的相对地址,就是相对根目录的地址,就是域名/后面的成分,格式上包括最前面的&/&,!表示非,这句语句表示访问的地址不以/blog/开头,只是开头^,没有结尾$
【rewritecond%{request_filename}!-f】
【rewritecond%{request_filename}!-d】
这两句语句的意思是请求的文件或路径是不存在的,如果文件或路径存在将返回已经存在的文件或路径
【rewriterule^(.*)$/blog/$1】重写规则,最重要的部分,意思是当上面的rewritecond条件都满足的时候,将会执行此重写规则,^(.*)$是一个正则表达的匹配,匹配的是当前请求的url,^(.*)$意思是匹配当前url任意字符,.表示任意单个字符,*表示匹配0次或n次(n&0),后面/blog/$1是重写成分,意思是将前面匹配的字符重写成/blog/$1,这个$1表示反向匹配,引用的是前面第一个圆括号的成分,即^(.*)$中的.*,其实这儿将会出现一个问题,后面讨论。
【rewritecond%{http_host}^(www\.)?xxx\.com$】
【rewriterule^(/)?$blog/index.php[l]】
这两句的意思是指请求的host地址是是,如果地址的结尾只有0个或者1个&/&时,将会重写到子目录下的主页,我猜想这主要因为重写后的地址是不能自动寻找主页的,需要自己指定。
现在说说出现的问题,rewriterule^(.*)$/blog/$1前部分^(.*)$将会匹配当前请求的url,例如:请求网址是/a.html,到底是匹配整个/a.html,还是只匹配/a.html即反斜杠后面的成分,还是只匹配a.html。
答案是:根据rewritebase规则规定,如果rewritebase为/,将会匹配a.html,不带前面的反斜杠,所以上条语句应该写成rewriterule^(.*)$blog/$1(不带/),不过实际上带上前面的反斜此文来自: 马开东博客
转载请注明出处 网址:
杠,也可以用,可能带不带都行。现在问题出来了,如果不设置rewritebase为/,将会匹配整个网址/a.html,显然这是错误的,所以应该添加这条:
rewitebase/
还有一个问题是,不能保证每个人输入的网址都是小写的,如果输入大写的呢,linux是区分大小写的,所以应该在rewritecond后添加[nc]忽略大小写的。
至此,完整的语句应该是:
####start####
rewriteengineon
rewitebase/
rewritecond%{http_host}^(www\.)?xxx\.com$[nc]
rewritecond%{request_uri}!^/blog/
rewritecond%{request_filename}!-f
rewritecond%{request_filename}!-d
rewriterule^(.*)$blog/$1
#没有输入文件名的默认到到首页
rewritecond%{http_host}^(www\.)?xxx\.com$[nc]
rewriterule^(/)?$blog/index.php[l]
####end####
如果后面还继续有语句的,就不应该加上最后的[l],因为这是表示最后一条语句的意思
防盗链的语句,同样需要添加rewitebase/,如下:
rewriteengineon
rewitebase/
rewritecond%{http_referer}!^$[nc]
rewritecond%{http_referer}![nc]
rewriterule\.(jpg|gif|png|bmp|swf|jpeg)$/error/daolian.gif[r,nc,l]
如果后面还继续有语句的,就不应该加上最后的[l],/error/daolian.gif为别人盗链时显示的图片。
下面附上简单的语法规则和flags:
【rewritecond语法:】
rewritecondteststringcondpattern[flags]
rewritecond的其他用法:
&-d&(目录)
将teststring视为一个路径名并测试它是否为一个存在的目录。
&-f&(常规文件)
将teststring视为一个路径名并测试它是否为一个存在的常规文件。
&-s&(非空的常规文件)
将teststring视为一个路径名并测试它是否为一个存在的、尺寸大于0的常规文件。
&-l&(符号连接)
将teststring视为一个路径名并测试它是否为一个存在的符号连接。
&-x&(可执行)
将teststring视为一个路径名并测试它是否为一个存在的、具有可执行权限的文件。该权限由检测。
&-f&(对子请求存在的文件)
检查teststring是否为一个有效的此文来自: 马开东博客
转载请注明出处 网址:
文件,而且可以在当前的访问控制配置下被访问。它使用一个内部子请求来做检查,由于会降低的性能,所以请谨慎使用!
&-u&(对子请求存在的url)
检查teststring是否为一个有效的url,而且可以在当前的访问控制配置下被访问。它使用一个内部子请求来做检查,由于会降低的性能,所以请谨慎使用!
【rewriterule语法:】
rewriterulepatternsubstitution[flags]
【flags】:
&chain|c&(链接下一规则)
此标记使当前规则与下一个规则相链接。它产生这样的效果:如果一个规则被匹配,则继续处理其后继规则,也就是这个标记不起作用;如果该规则不被匹配,则其后继规则将被跳过。比如,在一个目录级规则中执行一个外部重定向时,你可能需要删除&.www&(此处不应该出现&.www&)。
&cookie|co=name:val:domain[:lifetime[:path]]&(设置cookie)
在客户端设置一个cookie。cookie的名称是name,值是val。domain是该cookie的域,比如&.apache.org&,可选的lifetime是cookie的有效期(分钟),可选的path是cookie的路径。
&env|e=var:val&(设置环境变量)
此标记将环境变量var的值为val,val可以包含可扩展的反向引用($n和%n)。此标记可以多次使用以设置多个变量。这些变量可以在其后许多情况下被间接引用,通常是在xssi(&!&#echovar=&var&&&)或cgi($env{&var&})中,也可以在后继的rewritecond指令的condpattern参数中通过%{env:var}引用。使用它可以记住从url中剥离的信息。
&forbidden|f&(强制禁止url)
强制禁止当前url,也就是立即反馈一个http响应码403(被禁止的)。使用这个标记,可以链接若干个rewriteconds来有条件地阻塞某些url。
&gone|g&(强制废弃url)
强制当前url为已废弃,也就是立即反馈一个http响应码410(已废弃的)。使用这个标记,可以标明页面已经被废弃而不存在了。
&handler|h=content-handler&(强制指定内容处理器)
强自制定目标文件的内容处理器为content-handler。例如,用来模拟mod_alias模块的scriptalias指令,以强制映射文件夹内的所有文件都由&cgi-script&处理器处理。
&last|l&(结尾规则)
立即停止重写操作,并不再其他重写规则。它对应于perl中的last命令或c语言中的break命令。这个标记用于阻止当前已被重写的url被后继规则再次重写。例如,使用它可以重写根路径的url(&/&)为实际存在的url(比如:&/e/www/&)。
&next|n&(从头再来)
重新执行重写操作(从第一个规则重新开始)。此时再次进行处理的url已经不是原始的url了,而是经最后一个重写规则处理过的url。它对应于perl中的next命令或c语言中的continue命令。此标记可以重新开始重写操作(立即回到循环的开头)。但是要小心,不要制造死循环!
&nocase|nc&(忽略大小写)
它使pattern忽略大小写,也就是在pattern与当前url匹配时,&a-z&和&a-z&没有区别。
&noescape|ne&(在输出中不对uri进行转义)
此标记阻止mod_rewrite对重写结果常规的uri转义规则。一般情况下,特殊字符(&%&,&$&,&;&等)会被转义为等值的十六进制编码(&%&,&$&,&;&等)。此标记可以阻止这样的转义,以允许百分号等符号出现在输出中,比如:
rewriterule/foo/(.*)/bar?arg=p1\=$1[r,ne]
可以使&/foo/zed转向到一个安全的请求&/bar?arg=p1=zed&。
&nosubreq|ns&(不对内部子请求进行处理)
在当前请求是一个内部子请求时,此标记强制重写此文来自: 马开东博客
转载请注明出处 网址:
引擎跳过该重写规则。比如,在mod_include试图搜索目录默认文件(index.xxx)时,apache会在内部产生子请求。对于子请求,重写规则不一定有用,而且如果整个规则集都起作用,它甚至可能会引发错误。所以,可以用这个标记来排除某些规则。
使用原则:如果你为url添加了cgi脚本前缀,以强制它们由cgi脚本处理,但对子请求处理的出错率(或者资源开销)很高,在这种情况下,可以使用这个标记。
&proxy|p&(强制为代理)
此标记使替换成分被内部地强制作为代理请求发送,并立即中断重写处理,然后把处理移交给mod_proxy模块。你必须确保此替换串是一个能够被mod_proxy处理的有效uri(比如以http://hostname开头),否则将得到一个代理模块返回的错误。使用这个标记,可以把某些远程成分映射到本地域,从而增强了proxypass指令的功能。
注意:要使用这个功能,必须已经启用了mod_proxy模块。
&passthrough|pt&(移交给下一个处理器)
此标记强制重写引擎将内部request_rec结构中的uri字段设置为filename字段的值,这个小小的修改使得rewriterule指令的输出能够被(从uri转换到文件名的)alias,scriptalias,redirect等指令进行后续处理[原文:thisfla justahacktoenablepost-processingoftheoutputofrewriteruledirectives,usingalias,scriptalias,redirect,andotherdirectivesfromvariousuri-to-filenametranslators.]。
举一个能说明其含义的例子:如果要将/abc重写为/def,然后再使用mod_alias将/def转换为/ghi,可以这样:
rewriterule^/abc(.*)/def$1[pt]
alias/def/ghi
如果省略了pt标记,虽然将uri=/abc/&重写为filename=/def/&的部分运作正常,但是后续的mod_alias在试图将uri转换到文件名时会遭遇失效。
注意:如果需要混合使用多个将uri转换到文件名的模块时,就必须使用这个标记。。此处混合使用mod_alias和mod_rewrite就是个典型的例子。
&qsappend|qsa&(追加查询字符串)
此标记强制重写引擎在已有的替换字符串中追加一个查询字符串,而不是简单的替换。如果需要通过重写规则在请求串中增加信息,就可以使用这个标记。
&redirect|r[=code]&(强制重定向)
若substitution以http://thishost[:thisport]/(使新的url成为一个uri)开头,可以强制性执行一个外部重定向。如果没有指定code,则产生一个http响应码302(临时性 )。如果需要使用在300-400范围内的其他响应代码,只需在此指定即可(或使用下列符号名称之一:temp(默认),permanent,seeother)。使用它可以把规范化的url反馈给客户端,如将&/~&重写为&/u/&,或始终对/u/user加上斜杠,等等。
注意:在使用这个标记时,必须确保该替换字段是一个有效的url。否则,它会指向一个无效的位置!并且要记住,此标记本身只是对url加上http://thishost[:thisport]/前缀,重写操作仍然会继续进行。通常,你还会希望停止重写操作而立即重定向,那么就还需要使用&l'标记。
&skip|s=num&(跳过后继规则)
此标记强制重写引擎跳过当前匹配规则之后的num个规则。它可以模拟if-then-else结构:最后一个规则是then从句,而被跳过的skip=n个规则是else从句。注意:它和&chain|c&标记是不同的!
&type|t=mime-type&(强制mime类型)
强制目标文件的mime类型为mime-type,可以用来基于某些特定条件强制设置内容类型。比如,下面的指令可以让.php文件在以.phps扩展名调用的情况下由mod_php按照php源代码的mime类型(application/x-httpd-php-source)显示:
rewriterule^(.+\.php)s$$1[t=application/x-httpd-php-source]
/zwfec/item/0afdcdce5b01f
最近写一个网站是逛街区,但原来是用php写的,由于php对于 不是很好, 所以修改一下!
转:& 对静态页面非常友好,这样方便爬虫抓取页面内容,ok我们可以通过apache rewrite来实现静态化url,这样达到伪静态化的效果。首先我们要开启apache下rewrite模块,我以windows下为例(linux下也一样,原则就是要开启rewrite module)打开httpd.conf,找到
  #loadmodule rewrite_module modules/mod_rewrite.so
art apache
再以discuz为例,首先在后台开启静态url(其实就是把url变成了静态化的连接),接下来才是重要的部分
&ifmodule mod_rewrite.c&rewriteengine onrewriterule ^(.*)/archiver/((fid|tid)-[\w\-]+\.html)$ $1/archiver/index.php?$2rewriterule ^(.*)/forum-([0-9]+)-([0-9]+)\.html$ $1/forumdisplay.php?fid=$2&page=$3rewriterule ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/viewthread.php?tid=$2&extra=page\%3d$4&page=$3rewriterule ^(.*)/space-(username|uid)-(.+)\.html$ $1/space.php?$2=$3rewriterule ^(.*)/tag-(.+)\.html$ $1/tag.php?name=$2&/ifmodule&
将这些配置添加到http.conf的最下面,保存, art apache,搞定。
大家看看主要是配置文件那块,当我们请求这些所谓的静态连接的时候,他们将自动被转化到实际的动态url连接,好处我已经说了,对seo有利,可是我想了下,这无疑对apache增加了负担,当访问量大的时候,效率会出现问题,因为apache在处理的 上,加了一环,并且是对正则匹配!
&======================================
【备忘】apache rewrite 的说明
由&net001&于 星期五, 03/25/2011 - 08:56 提交
. 匹配任何单字符[chars] 匹配字符串:chars[^chars] 不匹配字符串:charstext1|text2 可选择的字符串:text1或text2? 匹配0到1个字符* 匹配0到多个字符+ 匹配1到多个字符^ 字符串开始标志$ 字符串结束标志\n 转义符标志
反向引用 $n 用于 rewriterule 中匹配的变量调用(0 &= n &= 9)反向引用 %n 用于 rewritecond 中最后一个匹配的变量调用(1 &= n &= 9)
&#####################################################################
http://blog.马开东/hu_zhenghui/article/details/1840189
apache - 模块 - mod_rewrite - rewriterule - 匹配任意字符串时,可以借助的灵活特性
通常情况下,在rewriterule中的需要考虑在前面加上^(匹配字符串开头)以及在末尾加上$(匹配字符串末尾),如果在前面不增加^用于匹配字符串开头的话,例如:
rewriterule /news/(/d+)/.html /news/.php/?id=$1 [n,l]
http://localhost/news/1.html
http://localhost/test/news/1.html
因此应当加上^
rewriterule ^/news/(/d+)/.html /news/.php/?id=$1 [n,l]
这样就不会匹配
http://localhost/test/news/1.html
因此从字面上看,匹配任意字符串应当是该字符串为任意多个(*)任意字符(.),写法如下:
rewriterule ^.*$ /index.html.en [r=301]
实际上,仅需要用.*即可
rewriterule .* /index.html.en [r=301]
因为不需要排除任何情况。需要注意不能只使用一个.:
rewriterule . /index.html.en [r=301]
如果仅访问该文件夹,而后面没有指定文件夹的话,将是空字符串
rewriterule .* /index.html.en [r=301]
上面的将匹配空字符串,而下面的不匹配空字符串
rewriterule . /index.html.en [r=301]
通常会跳转到目录的默认页面
[apache - ]
[apache - 常用模块]
mod_aliasmod_rewrite
[mod_rewrite模块 - ]
httxt2dbmmod_rewriteornextrewritebaserewritecondrewriteenginerewritelogrewriteloglevelrewritemaprewriterule
[mod_rewrite模块 - 常见用途]
改变查询参数的设定位置
[mod_rewrite模块 - 标记]
rewritelog, 设置重写引擎日志的文件名
rewriterule, 设置重写规则
[mod_rewrite模块 - 常见问题]
rewriterule中的需要考虑是否要加上^(匹配字符串开头)
rewriterule中的需要考虑是否要对.转义(匹配任意字符还是仅匹配.字符)
rewriterule中的r标记用于发送重定向
通过检查referer避免静态图片盗链对性能有严重影响
与php集成时不需要对$_get额外处理
[mod_alias模块 - 常见问题]
redirectmatch用于简单的重定向
####################################################################
http://snliuxun..cn/archives/60.html
rewirte主要的功能就是实现url的跳转,rewirte代码的是基于perl语言。基于级的(httpd.conf)和目录级的 (.htaccess)两种方式,而我们apache一般用的是目录级的 (.htaccess)方式,所以海天这里学习和记录的也就是(.htaccess)方式,俗称伪静态。
一般的.htaccess伪静态跳转写法为(下例为输入
的域名时跳转到):
rewriteengine onrewritecond %{http_host} ^ [nc]rewriterule ^(.*)&/&[l]
/2012/10/apache-rewrite/
apache rewrite规则(内部重定向、外部重定向)
前阵子某天,一同事让我帮忙看一下某内部的域名跳转的配置,本来这两年好像没做 方面东西了,不过鉴于曾经在 工作过,还是略懂apache配置,也想顺便玩一下。最后的配置还是比价简单的,也实现了他所需的功能。今天有点空闲时间,想写篇博客总结一些apache rewrite的配置语法和实例(源于网络资料),以便今后快速查阅。
我最后其实就在httpd.conf文件写了如下几行配置就将域名中以&otc-team&开头的url重定向为&/&下面的对应url。
rewriteengine on
rewritecond %{http_host} ^otc-team [nc]
rewriterule ^(.*)
http:///$1 [l]
1. 一些基础知识的介绍:the mod_rewrite module uses a rule-based rewriting engine, based on a pcre regular-expression parser, to rewrite requested urls on the fly. by default, mod_rewrite maps a url to a filesystem path. however, it can also be used to redirect one url to another url, or to invoke an internal proxy fetch.mod_rewrite provides a flexible and powerful way to manipulate urls using an unlimited number of rules. each rule can have an unlimited number of attached rule conditions, to allow you to rewrite url based on server variables, environment variables, http headers, or time stamps.mod_rewrite operates on the full url path, including the path-info section. a rewrite rule can be invoked in httpd.conf or in .htaccess. the path generated by a rewrite rule can include a query string, or can lead to internal sub-processing, external request redirection, or internal proxy throughput.简单解释一下内部重定向和外部重定向吧。内部重定向,是指域名并不发生变化,只是将某个url映射到了文件中的另一个路径。外部重定向,是指url已经法发生变化(在浏览器中显示看到的域名也跟着变化了),从一个url映射到了另一个url(可以是不同主机的,当然也可以是同一主机上的)。pcre(perl compatible regular expressions)是与perl5.x兼容的,使用这种的著名项目有apache、php、kde、safari等。
重写规则的作用范围,有如下三种:1) 可以使用在apache主配置文件httpd.conf中2) 可以使用在httpd.conf里定义的虚拟主机配置中3) 可以使用在基本目录的跨越配置文件.htaccess中首先,apache在编译时将mod_rewrite编译为模块,然后在apache的配置文件中加载它:loadmodule rewrite_module modules/mod_rewrite.so其次,这三种方式,都需要在写规则前,用&rewriteengine on&指令来打开rewrite功能。假如你对你的的网站内容所在的没有管理员权限,或者你的网站放在isp的上托管等等条件下,你无法改写主配置文件,然而你可以对你的web站点内容所在的目录有写权限,则你可以设置自己的.htaccess文件。 (本博客站点就有设置.htaccess文件做rewrite。)对文件.htaccess所作的任何改动不需要重启动apache. 不过,值得注意的是,需要确定主配置文件中对你的网站所在的目录定义了下面的内容:options indexes followsymlinksallowoverride all否则你的.htaccess文件配置不会工作。2. apache mod_rewrite规则重写的标志一览
1) r[=code](force redirect) 强制外部重定向强制在替代字符串加上http://thishost[:thisport]/前缀重定向到外部的url.如果code不指定,将用缺省的302 http状态码。2) f(force url to be forbidden)禁用url,返回403http状态码。3) g(force url to be gone) 强制url为gone,返回410http状态码。4) p(force proxy) 强制使用代理转发。5) l(last rule) 表明当前规则是最后一条规则,停止分析以后规则的重写。6) n(next round) 重新从第一条规则开始运行重写 。7) c(chained with next rule) 与下一条规则关联如果规则匹配则正常处理,该标志无效,如果不匹配,那么下面所有关联的规则都跳过。8.) t=mime-type(force mime type) 强制mime类型9) ns (used only if no internal sub-request) 只用于不是内部子请求10) nc(no case) 不区分大小写11) qsa(query string append) 追加请求字符串12) ne(no uri escaping of output) 不在输出转义特殊字符例如:rewriterule /foo/(.*) /bar?arg=p1%3d$1 [r,ne] #将能正确的将/foo/zoo转换成/bar?arg=p1=zoo13) pt(pass through to next handler) 传递给下一个处理例如:rewriterule ^/abc(.*) /def$1 [pt] # 将会交给/def规则处理alias /def /ghi14) s=num(skip next rule(s)) 跳过num条规则15) e=var:val(set environment variable) 设置环境变量
另外,p是代理模式转发,必须用url全称,并且要保证modproxy打开,也就是下面httpd.conf中的如下两个指令:loadmodule proxy_module modules/mod_proxy.soloadmodule proxy_http_module modules/mod_proxy_http.so如果对应proxy模块没加载,则会出现403禁止页面。
3. 一些有用的实际rewrite例子例1.下面是在一此文来自: 马开东博客
转载请注明出处 网址:
个虚拟主机里定义的规则。功能是把client请求的主机前缀不是和173.192.169.119都跳转到主机前缀为,避免相同内容的网页有多个指向的域名,如
namevirtualhost 173.192.169.119:80
serveradmin smile665(at)</
documentroot "/web"
rewriteengine on #打开rewirte功能
rewritecond %{http_host} !^ [nc] #声明client请求的主机中前缀不是,其中 [nc] 的意思是忽略大小写
rewritecond %{http_host} !^173.192.169.119 [nc] #声明client请求的主机中前缀不是70.40.213.183,其中 [nc] 的意思是忽略大小写
rewritecond %{http_host} !^$ #声明client请求的主机中前缀不为空
rewriterule ^(.*) http:/// [l] #含义是如果client请求的主机中的前缀符合上述条件,则直接进行跳转到/,[l]意味着立即停止重写操作,并不再其他重写规则。这里的.*是指匹配所有url中的任意字符,()括号的功能是把所有的字符做一个标记,以便于后面用$1这样的变量来引用,就是引用前面里的(.*)字符。
例2. 将输入
的域名时跳转到
rewriteengine on
rewritecond %{http_host} ^ [nc]
rewriterule ^(.*) http:/// [l]
例3. 赛卡近期更换了域名,新域名为, 更加简短好记。这时需要将原来的域名, 以及论坛所在地址/bbs/定向到新的域名,以便用户可以找到,并且使原来的论坛 url 继续有效而不出现 404 未找到,比如原来的/bbs/tread-60.html, 让它在新的域名下继续有效,点击后转发到/tread-60.html,而其他网页,如原先的/purchase不会到二级域名/purchase上,而是到/purchase按照这样的要求重定向规则应该这样写:
rewriteengine on
rewritecond %{request_uri} ^/bbs/
rewriterule ^bbs/(.*) http:///$1 [r=permanent,l]
rewritecond %{request_uri} !^/bbs/
rewriterule ^(.*) http:///$1 [r=permanent,l]
例4: 同时达到下面两个要求:1.用/xxx.php 来访问 /xxx/2.用 来访问 /user.php?username=yyy 的功能
rewriteengine on
rewritecond %{http_host} ^
rewritecond %{request_uri} !^user.php$
rewritecond %{request_uri} .php$
rewriterule (.*).php$ http:///$1/ [r]
rewritecond %{http_host} !^
rewriterule ^(.+) %{http_host} [c]
rewriterule ^([^.]+). http:///user.php?username=$1
例5:实现如下url的rewrite:/type*.html 被重定向为 /type.php?typeid=*/type*page*.html 被重定向为 /type.php?typeid=*&page=*
rewriterule ^/type([0-9]+).html$ /type.php?typeid=$1 [pt]
rewriterule ^/type([0-9]+)page([0-9]+).html$ /type.php?typeid=$1&page=$2 [pt]
例6.使用apache的url rewrite配置多用户虚拟要实现这个功能,首先要在dns上打开域名的泛域名解析(自己做或者找域名服务商做)。比如,我就把 *.kiya.us和 *.全部解析到了我的ip地址70.40.213.183上。然后,看一下我的apache中关于*.kiya.us的虚拟主机的设定。
serveradmin webmaster@kiya.us
documentroot /home/www/www.kiya.us
servername dns.kiya.us
serveralias dns.kiya.us kiya.us *.kiya.us
customlog /var/log/httpd/osa/access_log.log& common
errorlog /var/log/httpd/osa/error_log.log&
allowoverride none
order deny,allow
rewriteengine on
rewritecond %{http_host} ^[^.]+.kiya.(cn|us)$
rewriterule ^(.+) %{http_host}$1 [c]
rewriterule ^([^.]+).kiya.(cn|us)(.*)$ /home/www/www.kiya.us/sylvan$3?un=$1&%{query_string} [l]
在这段设定中,我把*.和*.kiya.us 的document root都设定到了 /home/www/www.kiya.us继续看下去,在这里我就配置了url rewrite规则。rewriteengine on #打开url rewrite功能rewritecond %{http_host} ^[^.]+.kiya.(cn|us)$ #匹配条件,如果用户输入的url中主机名是类似 xxxx.kiya.us 或者
就执行下面一句rewriterule ^(.+) %{http_host}$1 [c] #把用户输入完整的地址(get方式的参数除外)作为参数传给下一个规则,[c]是chain串联下一个规则的意思rewriterule ^([^.]+).kiya.(cn|us)(.*)$ /home/www/dev.kiya.us/sylvan$3?un=$1&%{query_string} [l]# 最关键的是这一句,使用证则表达式解析用户输入的url地址,把主机名中的用户名信息作为名为un的参数传给/home/www/dev.kiya.us目录下的脚本,并在后面跟上用户输入的get方式的传入参数。并指明这是最后一条规则([l]规则)。注意,在这一句中指明的重写后的地址用的是上的绝对路径,这是内部跳转。如果使用http://xxxx这样的url格式,则被称为外部跳转。使用外部跳转的话,浏览着的浏览器中的url地址会改变成新的地址,而使用内部跳转则浏览器中的地址不发生改变,看上去更像实际的二级域名虚拟。设置后重启apache就大功告成了! (重新让apache重新reload配置即可)
例6. 通过rewrite防止盗链 (经常看到有的网站对图片盗链有限制,其实设置就是这么简单)不允许
这两个网站盗链 , 其它的网站都可以盗链的规则怎么写.
rewriteengine on
rewritecond %{http_referer}
rewritecond %{http_referer}
rewriterule .*\.(jpg|jpeg|gif|png|rar|zip|txt|ace|torrent|gz|swf)$ http:///fuck.png [r,nc,l]
例7. 关于是否需要使用完全转义,比如在 rewritecond %{http_referer}
[nc] 中 把
改成 chinaz\.com答案是,两者都是可以的。
例8. 另外几个小例子:1. 屏蔽ie和opera浏览器(user-agent)
rewriteengine on
rewritecond %{http_user_agent} ^msie [nc,or]
rewritecond %{http_user_agent} ^opera [nc]
rewriterule ^.* & [f,l]
#这里"-"表示没有替换,浏览器为ie和opera的访客将被禁止访问。
2. 自动添加.php扩展名及自动换.html到.php扩展名
rewriteengine on
rewritebase /test
rewritecond %{request_filename}.php -f
rewriterule ([^/]+)$ /test/$1.php
#for example: /test/admin =& /test/admin.php
rewriterule ([^/]+)\.html$ /test/$1.php [l]
#for example: /test/admin.html =& /test/admin.php
3. 限制仅显示图片,而不能显示其他文件的请求。
#限制目录只能显示图片
& ifmodule mod_rewrite.c&
rewriteengine on
rewritecond %{request_filename} !^.*\.(gif|jpg|jpeg|png|swf)$
rewriterule .*$ & [f,l]
& /ifmodule&
补充,关于特定文件扩展名的重写。重写有某些扩展名的文件:rewriterule (.*.css$|.*. $) gzip.php?$1 [l]如果要排除一些扩展名:rewriterule !\.( |ico|gif|jpg|jpg|png|png|css|pdf|swf)$ index.php
参考资料:摘录资料的博客1:http://slj.me/2009/04/apache-rewrite-regular/摘录资料的博客2:http://blog.马开东/chaiqi/article/details/5620427apache rewrite官网手册:http://httpd.apache.org/docs/current/mod/mod_rewrite.htmlpcre介绍:http://www.pcre.org/
.cn/s/blog_677dc4bc0100ih09.html
5.现在开启url的跳转
我用一个例子来说明当,红色部分你可以替换成自己需要的
找到&rewriteengine on&
在其下面加入
rewritecond %{http_host}&^test.&[nc]
&#[nc]表示结束,上面一条是你需要转发的源地址
rewriterule ^(.*)&http://www./test/test/&[r,l]
#上一条是你转发的目的地址,r表示正常显示,如果设置成p的话就是隐藏目标地址
6.现在你访问^test.&就会自动跳转到http://www./test/test/
########################################
&http://www./scgw/archive//2033730.html
rewirte主要的功能就是实现url的跳转和隐藏真实地址,基于perl语言的规范。平时帮助我们实现拟静态,拟目录,域名跳转,防止盗链等。本文将针对mod_rewrite和url匹配的技术细节,以及rewritecond与rewriterule 指令格式进行探讨。
rewirte模块内部处理
rewirte模块的内部处理极为复杂,但是为了使一般用户避免犯低级错误,也让管理员能充分利用其功能,在此仍然做一下说明。
rewirte模块api阶段
首先,你必须了解apache是分若干阶段来处理http请求的。apache api对每个阶段都提供了一个hook程序。mod_rewrite使用两个hook程序:其一,从url到文件名的转换hook(用在读取http请求之后、授权开始之前); 其二,修正hook(用在授权阶段和读取目录级配置(.htaccess)之后、内容处理器激活之前)。
所以,apache收到一个请求并且确定了响应主机(或虚拟主机)之后,重写引擎即开始处理级配置中的所有mod_rewrite指令(此时处于从url到文件名转换的阶段),此阶段完成后,最终的数据目录便确定了。接下来进入修正程序段并触发目录级配置中的mod_rewrite指令。这两个阶段并不是泾渭分明的,但都实施了把url重写成新的url或者文件名。虽然api最初不是为此目的而设计的,但是现在它已经成为了api的一种用途。记住以下两点,会有助于更好地理解:
1、虽然mod_rewrite可以将url重写为新的url或文件名,甚至将文件名重写为新的文件名,但是之前的api只提供从url到文件名的hook。在apache 2.0中,增加了两个丢失的hook以使得处理 更加清晰。不过这样做并没有给用户带来麻烦,用户只需记住这样一个事实:借助从url到文件名的hook比最初api设计的目标功能更强大。
2、令人难以置信的是,mod_rewrite还提供了目录级的url操作(.htaccess文件),而这些文件必须在将url转换成文件名之后才会被处理(这是必须的,因为.htaccess存在于文件中)。换句话说,根据api阶段,这时再处理任何url操作已经太晚了。为了解决这个&鸡和蛋&的问题,mod_rewrite使用了一个小技巧:在进行一个目录级的url/文件名操作时,先把文件名重写回相应的url(通常这个操作是不可行的,但是参考下面的rewritebase指令就能明白它是怎么实现的了),然后,对这个新的url建立一个新的内部的子请求,再重新开始api阶段的执行。
另外,mod_rewrite尽力使这些复杂的操作对用户透明。但仍须记住:级的url操作速度快而且效率高,而目录级的操作由于这个&鸡和蛋&的问题速度较慢而且效率也低。但从另一个侧面看,这却是mod_rewrite得以为一般用户提供(局部限制的)url操作的唯一 。
rewirte模块规则集的处理
当mod_rewrite在这两个api阶段中开始执行时,它会读取配置结构中配置好的 (或者是在服务启动时建立的级的,或者是在遍历目录采集到的目录级的)规则集,然后,启动url重写引擎来处理(带有一个或多个条件的)规则集。无论是级的还是目录级的规则集,都是由同一个url重写引擎处理,只是最终结果处理不同而已。
规则集中规则的顺序是很重要的,因为重写引擎是按一种特殊的顺序处理的:逐个遍历每个规则(rewriterule指令),如果出现一个匹配条件的规则,则可能回头遍历已有的规则条件(rewritecond指令)。由于历史的原因,条件规则是前置的,所以控制流程略显冗长,细节见图-1。
图-1:重写规则集中的控制流
可见,url首先与每个规则的pattern匹配,如果匹配失败,mod_rewrite将立即终止此规则的处理,继而处理下一个规则。如果匹配成功,mod_rewrite将寻找相应的规则条件,如果一个条件都没有,则简单地用substitution构造的新值来替换url,然后继续处理其他规则;但是如果条件存在,则开始一个内部循环按其列出的顺序逐个处理。对规则条件的处理有所不同:url并不与模式进行匹配,而是首先通过扩展变量、反向引用、查找映射表等步骤建立一个teststring字符串,然后用它来与condpattern匹配。如果匹配失败,则整个条件集和对应的规则失败;如果匹配成功,则执行下一个规则直到所有条件执行完毕。如果所有条件得以匹配,则以substitution替换url,并且继续处理。(本部分引用译者:金步国)
rewritecond指令格式
语法: rewritecond teststring condpattern [flags]
rewritecond指令定义一条规则条件。在一条rewriterule指令前面可能会有一条或多条rewritecond指令,只有当自身的模板(pattern)匹配成功且这些条件也满足时规则才被于当前url处理。
1、 teststring是一个纯文本的字符串,除了包含普通的字符外,还可以包括下列的可扩展结构:
1)$n:rewriterule后向引用,其中(0 &= n &= 9) 。$n引用紧跟在rewritecond后面的rewriterule中模板中的括号中的模板在当前url中匹配的数据。
2)%n:rewritecond后向引用,其中(0 &= n &= 9) 。%n引用最后一个rewritecond的模板中的括号中的模板在当前url中匹配的数据。
3)${mapname:key|default}:rewritemap扩展。
2、condpattern是条件pattern, 即一个于当前实例teststring的, 即teststring将会被计算然后与condpattern匹配。作为一个标准的扩展正则式,condpattern有以下补充:
1)可以在模板串前增加一个!前缀,以用表示不匹配模板。但并不是所有的test都可以加!前缀。
2)condpattern中可以使用以下特殊变量:
'&condpattern& (大于) 将condpattern当作一个普通字符串,将它和teststring进行比较,当teststring 的字符大于condpattern为真。
&=condpattern& (等于) 将condpattern当作一个普通字符串,将它和teststring进行比较,当teststring 与condpattern完全相同时为真.如果condpattern只是 && (两个引号紧挨在一起) 此时需teststring 为空字符串方为真。
&-d& (是否为目录) 将teststring当作一个目录名,检查它是否存在以及是否是一个目录。
&-f& (是否是regular file) 将teststring当作一个文件名,检查它是否存在以及是否是一个regular文件。
&-s& (是否为长度不为0的regular文件) 将teststring当作一个文件名,检查它是否存在以及是否是一个长度大于0的regular文件。
&-l& (是否为symbolic link) 将teststring当作一个文件名,检查它是否存在以及是否是一个 symbolic link。
&-f& (通过subrequest来检查某文件是否可访问) 检查teststring是否是一个合法的文件,而且通过范围内的当前设置的访问控制进行访问。这个检查是通过一个内部subrequest完成的, 因此需要小心使用这个功能以降低的性能。
&-u& (通过subrequest来检查某个url是否存在) 检查teststring是否是一个合法的url,而且通过范围内的当前设置的访问控制进行访问。这个检查是通过一个内部subrequest完成的, 因此需要小心使用这个功能以降低的性能。
3、[flags]是第三个参数,多个标志之间用逗号分隔。
1)&nocase|nc& (不区分大小写)   在扩展后的teststring和condpattern中,比较时不区分文本的大小写。注意,这个标志对文件和subrequest检查没有影响.
2)&ornext|or& (建立与下一个条件的或的关系)   默认的情况下,二个条件之间是and的关系,用这个标志将关系改为or。例如: rewritecond %{remote_host} ^host1.* [or] rewritecond %{remote_host} ^host2.* [or] rewritecond %{remote_host} ^host3.* rewriterule & 如果没有[or]标志,需要写三个条件/规则.
rewriterule 指令
语法: rewriterule pattern substitution [flags]
1) pattern是一个作用于当前url的兼容perl的. 这里的&当前&是指该规则生效时的url的值。
2) substitution是,当原始url与pattern相匹配时,用以替代(或替换)的字符串。
3) 此外,substitution还可以追加特殊标记[flags] 作为rewriterule指令的第三个参数。 flags是一个包含以逗号分隔的下列标记的列表:
redirect|r [=code] (强制重定向 redirect)
以 http://thishost[:thisport]/(使新的url成为一个uri) 为前缀的substitution可以强制性执行一个外部重定向。 如果code没有指定,则产生一个http响应代码302(临时性 )。如果需要使用在300-400范围内的其他响应代码,只需在此指定这个数值即可, 另外,还可以使用下列符号名称之一: temp (默认的), permanent, seeother. 用它可以把规范化的url反馈给客户端,如, 重写&/~&为 &/u/&,或对/u/user加上斜杠,等等。
注意: 在使用这个标记时,必须确保该替换字段是一个有效的url! 否则,它会指向一个无效的位置! 并且要记住,此标记本身只是对url加上 http://thishost[:thisport]/的前缀,重写操作仍然会继续。通常,你会希望停止重写操作而立即重定向,则还需要使用&l&标记.
forbidden|f (强制url为被禁止的 forbidden)
强制当前url为被禁止的,即,立即反馈一个http响应代码403(被禁止的)。使用这个标记,可以链接若干rewriteconds以有条件地阻塞某些url。
gone|g&(强制url为已废弃的 gone)
强制当前url为已废弃的,即,立即反馈一个http响应代码410(已废弃的)。使用这个标记,可以标明页面已经被废弃而不存在了.
proxy|p (强制为代理 proxy)
此标记使替换成分被内部地强制为代理请求,并立即(即, 重写规则处理立即中断)把处理移交给代理模块。你必须确保此替换串是一个有效的(比如常见的以 http://hostname开头的)能够为apache代理模块所处理的uri。使用这个标记,可以把某些远程成分映射到本地名称空间, 从而增强了proxypass指令的功能。
注意: 要使用这个功能,代理模块必须编译在apache中。 如果你不能确定,可以检查&httpd -l&的输出中是否有mod_proxy.c。 如果有,则mod_rewrite可以使用这个功能;如果没有,则必须启用mod_proxy并重新编译&httpd&程序。
last|l (最后一个规则 last)
立即停止重写操作,并不再其他重写规则。 它对应于perl中的last命令或c语言中的break命令。这个标记可以阻止当前已被重写的url为其后继的规则所重写。 举例,使用它可以重写根路径的url(&/&)为实际存在的url, 比如, &/e/www/&.
next|n (重新执行 next round)
重新执行重写操作(从第一个规则重新开始). 这时再次进行处理的url已经不是原始的url了,而是经最后一个重写规则处理的url。它对应于perl中的next命令或c语言中的continue命令。 此标记可以重新开始重写操作,即, 立即回到循环的头部。但是要小心,不要制造死循环!
chain|c (与下一个规则相链接 chained)
此标记使当前规则与下一个(其本身又可以与其后继规则相链接的, 并可以如此反复的)规则相链接。 它产生这样一个效果: 如果一个规则被匹配,通常会继续处理其后继规则, 即,这个标记不起作用;如果规则不能被匹配,则其后继的链接的规则会被忽略。比如,在执行一个外部重定向时, 对一个目录级规则集,你可能需要删除&.www& (此处不应该出现&.www&的)。
type|t=mime-type(强制mime类型 type)
强制目标文件的mime类型为mime-type。 比如,它可以用于模拟mod_alias中的scriptalias指令,以内部地强制被映射目录中的所有文件的mime类型为&application/x-httpd-cgi&。
nosubreq|ns (仅用于不对内部子请求进行处理 no internal sub-request)
在当前请求是一个内部子请求时,此标记强制重写引擎跳过该重写规则。比如,在mod_include试图搜索可能的目录默认文件(index.xxx)时, apache会内部地产生子请求。对子请求,它不一定有用的,而且如果整个规则集都起作用,它甚至可能会引发错误。所以,可以用这个标记来排除某些规则。
根据你的需要遵循以下原则: 如果你使用了有cgi脚本的url前缀,以强制它们由cgi脚本处理,而对子请求处理的出错率(或者开销)很高,在这种情况下,可以使用这个标记。
nocase|nc (忽略大小写 no case)
它使pattern忽略大小写,即, 在pattern与当前url匹配时,&a-z& 和&a-z&没有区别。
qsappend|qsa (追加请求串 query string append)
此标记强制重写引擎在已有的替换串中追加一个请求串,而不是简单的替换。如果需要通过重写规则在请求串中增加信息,就可以使用这个标记。
noescape|ne (在输出中不对uri作转义 no uri escaping)
此标记阻止mod_rewrite对重写结果常规的uri转义规则。 一般情况下,特殊字符(如&%&, &$&, &;&等)会被转义为等值的十六进制编码。 此标记可以阻止这样的转义,以允许百分号等符号出现在输出中,如:
rewriterule /foo/(.*) /bar?arg=p1\=$1 [r,ne] 可以使&/foo/zed&转向到一个安全的请求&/bar?arg=p1=zed&.
passthrough|pt (移交给下一个处理器 pass through)
此标记强制重写引擎将内部结构request_rec中的uri字段设置为 filename字段的值,它只是一个小修改,使之能对来自其他uri到文件名翻译器的 alias,scriptalias, redirect 等指令的输出进行后续处理。举一个能说明其含义的例子:如果要通过mod_rewrite的重写引擎重写/abc为/def,然后通过mod_alias使/def转变为/ghi,可以这样:
rewriterule&^/abc(.*)&/def$1&[pt]
alias /def /ghi如果省略了pt标记,虽然mod_rewrite运作正常, 即, 作为一个使用api的uri到文件名翻译器,它可以重写uri=/abc/&为filename=/def/&,但是,后续的mod_alias在试图作uri到文件名的翻译时,则会失效。
注意: 如果需要混合使用不同的包含uri到文件名翻译器的模块时, 就必须使用这个标记。。混合使用mod_alias和mod_rewrite就是个典型的例子。
for apache hackers
如果当前apache api除了uri到文件名hook之外,还有一个文件名到文件名的hook, 就不需要这个标记了! 但是,如果没有这样一个hook,则此标记是唯一的 。 apache group讨论过这个问题,并在apache 2.0 版本中会增加这样一个hook。
skip|s=num (跳过后继的规则 skip)
此标记强制重写引擎跳过当前匹配规则后继的num个规则。 它可以实现一个伪if-then-else的构造: 最后一个规则是then从句,而被跳过的skip=n个规则是else从句. (它和&chain|c&标记是不同的!)
env|e=var:val (设置环境变量 environment variable)
此标记使环境变量var的值为val, val可以包含可扩展的反向引用的$n和%n。 此标记可以多次使用以设置多个变量。这些变量可以在其后许多情况下被间接引用,但通常是在xssi (via ) or cgi (如 $env{&var&})中, 也可以在后继的rewritecond指令的pattern中通过%{env:var}作引用。使用它可以从url中剥离并记住一些信息。
cookie|co=name:val:domain[:lifetime[:path]] (设置cookie)
它在客户端浏览器上设置一个cookie。 cookie的名称是name,其值是val。 domain字段是该cookie的域,比如&.apache.org&, 可选的lifetime是cookie生命期的分钟数,可选的path是cookie的路径。
city_map.txt的内容:
hangzhou 12
beijing 13
1、/tianqi/ 跳转到 /service/detail.html?id=tianqi&date=
rewritemap&city-map&txt:/etc/httpd/conf.d/map/city_map.txt
rewritecond&%{http_host}& & ^(.+)\.google\.com$
rewriterule&^/([\w]+)/([\d]+)$&/service/detail\.html\?id=$1&date=$2&c=${city-map:%1|%1}&[pt,l]
%{http_host}:取请求的域名
^(.+)\.google\.com$:^,开头;$结尾。.(逗号),除终止符外的任意字符。+,重复一个或一个以上的字符。\,转义字符。
^/([\w]+)/([\d]+)$:[],集合字符。\w,数字或字母。\d,数字。
$1:表示的是符合rewriterule 中[\w]+正则式的字符串,也就是tianqi。
$2:表示的是符合rewriterule 中[\d]+ 正则式的字符串,也就是。
%1:表示的是符合rewritecond 中.+正则式的字符串,也就是hangzhou。
${city-map:%1|%1}:表示取city-map中%1也就是hangzhou对应的值,如果没有则为%1也就是hangzhou。
2、能看出下面的规则是做了什么吗?
下载:&httpd.ini
rewritecond& && %{http_host}& & ^(.+)\.google\.com$
rewriterule&^/([\w]+)/([^-]+)-([^-]+)--([^-]+)-([^-]+)--([^-]+)-([^-]+)--([^-]+-[^-]+--[^-]+-[^-]+--[^-]+-[^-]+)$&/$1/$2=$3&$4=$5&$6=$7&$8&&&[c]&
rewritecond& && %{http_host}& & ^(.+)\.google\.com$
rewriterule&^/([\w]+)/([^-]+)-([^-]+)--([^-]+)-([^-]+)--([^-]+)-([^-]+)$& &&&/service/list\.html\?frontcategoryid=${category-map:$1|0}&$2=$3&搜索此文相关文章:此文来自: 马开东博客
网址: 站长QQ
proxy模块;rewrite,伪静态,d.url跳转;内部重定向;外部重定向;_博客园相关文章
博客园_总排行榜
博客园_最新
博客园_月排行榜
博客园_周排行榜
博客园_日排行榜

我要回帖

更多关于 橘子页面载入失败 的文章

 

随机推荐