原来子目录的.htaccess不会自动继承根目录的规则

标签:无

博客迁移时突然想起得把原域名的裸域重定向到www子域名去,因为Google App Engine是不支持裸域的。于是在网上抄了一段代码放在网站根目录下:
RewriteEngine On
RewriteCond %{http_host} ^keakon.cn [NC]
RewriteRule ^(.*)$ http://www.keakon.cn/$1 [R=301,L]

然而规则写好后,访问却没有效果,问了主机商也无解,于是继续一个人捣鼓了…

最终我注意到一个现象,直接访问http://keakon.cn/会被重定向到http://www.keakon.cn/,但是访问http://keakon.cn/bbs/则不会被重定向到http://www.keakon.cn/bbs/。
于是立刻想起bbs子目录下也有个.htaccess文件用来URL重写,难道是覆盖了根目录的规则?

检查了一下发现没问题,但是把子目录的规则全部删掉,或者删掉.htaccess文件,重定向就生效了。
于是猜想无论子目录是否和根目录的规则冲突,只要存在就会无视根目录的规则。
接下来就好办了,单独再给bbs子目录加上这个规则即可:
RewriteEngine On
RewriteCond %{http_host} ^keakon.cn [NC]
RewriteRule ^(.*)$ http://www.keakon.cn/bbs/$1 [R=301,L]
注意这次是以/bbs/为base URL,所以匹配规则中是省略了这部分的,而重定向地址还得补上。

接着又去Google了下原因,发现了一篇《htaccess rewrite 用法》
里面提到必须手动写上“RewriteOptions inherit”才能继承父配置。
不过囧的是根目录和子目录的base URL是不一样的,直接继承会把子目录重定向到根目录,所以还是得用上述的笨方法…

0条评论 你不来一发么↓

    想说点什么呢?