一条RewriteRule指令,定义一条重写规则,规则间的顺序非常重要 。对Apache1.2及以后的版本,模板(pattern)是一个POSIX正则式,用以匹配当前的URL 。当前的URL不一定是用记最初提交的URL,因为可能用一些规则在此规则前已经对URL进行了处理 。
对mod_rewrite来说,!是个合法的模板前缀,表示“非的意思,这对描述“不满足某种匹配条件的情况非常方便,或用作最后一条默认规则 。当使用!时,不能在模板中有分组的通配符,也不能做后向引用 。
当匹配成功后,Substitution会被用来替换相应的匹配,它除了可以是普通的字符串以外,还可以包括:
1. $N,引用RewriteRule模板中匹配的相关字串,N表示序号,N=0..9
2. %N,引用最后一个RewriteCond模板中匹配的数据,N表示序号
3. %{VARNAME},服务器变量
4. ${mapname:key|default},映射函数调用
这些特殊内容的扩展,按上述顺序进行 。
一个URL的全部相关部分都会被Substitution替换,而且这个替换过程会一直持续到所有的规则都被执行完,除非明确地用L标志中断处理过程 。
当susbstitution有-前缀时,表示不进行替换,只做匹配检查 。
利用RewriteRule,可定义含有请求串(Query String)的URL,此时只需在Sustitution中加入一个?,表示此后的内容放入QUERY_STRING变量中 。如果要清空一个QUERY_STRING变量,只需要以?结束Substitution串即可 。
如果给一个Substitution增加一个http://thishost[:port]的前缀,则mod_rewrite会自动将此前缀去掉 。因此,利用http://thisthost做一个无条件的重定向到自己,将难以奏效 。要实现这种效果,必须使用R标志 。
Flags是可选参数,当有多个标志同时出现时,彼此间以逗号分隔 。
1. "redirect|R [=code]" (强制重定向)
给当前的URI增加前缀http://thishost[:thisport]/,从而生成一个新的URL,强制生成一个外部重定向(external redirection,指生的URL发送到客户端,由客户端再次以新的URL发出请求,虽然新URL仍指向当前的服务器). 如果没有指定的code值,则HTTP应答以状态值302 (MOVED TEMPORARILY),如果想使用300-400(不含400)间的其它值可以通过在code的位置以相应的数字指定,也可以用标志名指定: temp (默认值), permanent, seeother.
注意,当使用这个标志时,要确实substitution是个合法的URL,这个标志只是在URL前增加http://thishost[:thisport]/前缀而已,重写操作会继续进行 。如果要立即将新URL重定向,用L标志来中重写流程 。
2. "forbidden|F" (强制禁止访问URL所指的资源)
立即返回状态值403 (FORBIDDEN)的应答包 。将这个标志与合适的RewriteConds 联合使用,可以阻断访问某些URL 。
3. "gone|G" (强制返回URL所指资源为不存在(gone))
立即返回状态值410 (GONE)的应答包 。用这个标志来标记URL所指的资源永久消失了.
4. # "proxy|P" (强制将当前URL送往代理模块(proxy module))
这个标志,强制将substitution当作一个发向代理模块的请求,并立即将共送往代理模块 。因此,必须确保substitution串是一个合法的URI (如, 典型的情况是以http://hostname开头),否则会从代理模块得到一个错误. 这个标志,是ProxyPass指令的一个更强劲的实现,将远程请求(remote stuff)映射到本地服务器的名字空间(namespace)中来 。
5. "last|L" (最后一条规则)
中止重写流程,不再对当前URL施加更多的重写规则 。这相当于perl的last命令或C的break命令 。
6. "next|N" (下一轮)
重新从第一条重写规则开始执行重写过程,新开的过程中的URL不应当与最初的URL相同 。这相当于Perl的next命令或C的continue命令. 千万小心不要产生死循环 。
推荐阅读
- 精明和不精明的人差别在哪,精明的人干什么都精明
- qq浏览器的文档怎么重命名 QQ浏览器文档怎么重命名
- 有效去眼袋的方法
- 手机QQ浏览器删除的文件怎么找回 qq浏览器删除的下载文件怎么找回
- 对夏新e850使用的小结
- ofo共享单车出现押金退不了的具体处理方法
- 盛夏畜群的清凉解暑饲料
- 玉麒麟是谁的绰号
- 降噪耳机是怎么降噪的?一文详解降噪耳机的正确用法
- 皮皮虾中将账号注销的具体操作方法