作者:夕阳红梅乎 | 来源:互联网 | 2014-05-06 17:38
Apache的mod_rewrite是供给了强盛URL把持的杀手级的模块,可以实现几乎所有你幻想的URL把持类型,其代价是你必需接收其复杂性,由于mod_rewrite的重要障碍就是初学者不轻易懂得和应用,即
Apache的mod_rewrite是供给了强盛URL把持的杀手级的模块,可以实现几乎所有你幻想的URL把持类型,其代价是你必需接收其复杂性,由于mod_rewrite的重要障碍就是初学者不轻易懂得和应用,即使是Apache专家有时也会发掘出mod_rewrite的新用处。
换句话说:对mod_rewrite,或者是打退堂鼓永不再用,或者是爱好它并一生受用。
ReWrite可以利用在以下方面或者解决以下标题:
URL的计划
规范的URL
阐明:
在有些网站服务器上,一个资源会拥有多个URL,在实际利用和宣布中应当被应用的是规范的URL,其他的则是简写或者是内部应用的。无论用户在恳求中应用什么情势的URL,他终极看见的都应当是规范的URL。
计划:
对所有的不规范的URL履行一个外部的HTTP重定向,以转变它在浏览器地址栏中的显示及其后继的恳求。下例中的规矩集用规范的/u/user调换/~user,并修正了/u/user所遗漏的后缀的斜杠。
代码:
RewriteRule ^/~([^/] )/?(.*) /u/$1/$2 [R]
RewriteRule ^/([uge])/([^/] )$ /$1/$2/ [R]
规范的主机名
阐明:
...
计划:
代码:
RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/(.*) http://fully.qualified.domain.name:%{SERVER_PORT}/$1 [L,R]
RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*) http://fully.qualified.domain.name/$1 [L,R]
被移动过的DocumentRoot
阐明:
通常,网站服务器的DocumentRoot直接对应于URL'/',但是,它经常不是处于最高一级,而可能只是众多数据池中的一个实体。比如,在Intranet站点中,有/e/www/(WWW的主页)、/e/sww/ (Intranet的主页)等等,而DocumentRoot指向了/e/www/,则必需保证此数据池中的所有内嵌的图片和其他元素对后继恳求有效。
计划:
只须重定向URL /到/e/www/即可。这个计划看起来很简略,但只是有了mod_rewrite模块的支撑,它才简略,由于传统的URL Aliases机制(由mod_alias及其相干模块供给)只是作了一个前缀匹配,DocumentRoot是一个对所有URL的前缀,因而无法实现这样的重定向。而用mod_rewrite的确很简略:
代码:
RewriteEngine on
RewriteRule ^/$ /e/www/ [R]