通常利用Apache的rewrite模块对 URL 进行重写的时候, rewrite规则会写在 .htaccess 文件里。但要使 apache 能够正常的读取.htaccess 文件的内容,就必须对.htaccess 所在目录进行配置。从安全性考虑,根目录的AllowOverride属性一般都配置成不允许任何Override ,即
< Directory />
AllowOverride None
< /Directory>
在 AllowOverride 设置为 None 时, .htaccess 文件将被完全忽略。当此指令设置为 All 时,所有具有 “.htaccess” 作用域的指令都允许出现在 .htaccess 文件中。
而对于 URL rewrite 来说,至少需要把目录设置为
< Directory /myblogroot/>
AllowOverride FileInfo
< /Directory>
以前一直对Apache当中的性能优化没有概念,通常都是从MySQL, PHP的优化,缓存等方面去考虑。今天下午,因为要在目录当中做url rewrite,将根目录的 AllowOverride 设置从None设置为了All,发现整个网站的响应速度慢了几倍(一点不夸张!),当时琢磨了一下,以为是主机提供商的主机资源分配言过其实并没有达到其宣称的数量。带着这个疑问,就出去买包子了,买包子的路上忽然有个念头涌上心头,记得有个印象是AllowOverride会影响系统的性能的,刚才自己是修改了这个AllowOverride,会不会是因为这个原因呢?
回来,吃完包子,把根目录的AllowOverride All修改成了特定目录的配置,从
AllowOverride All
修改成了
AllowOverride FileInfo Options
发现整个网站的响应速度确实有很大提升。
查询了一下Apache2.2文档中,AllowOverride设置为All时,会由当前访问文件向上一直寻找到根目录,依次寻找.htaccess文件,这样对性能的影响确实会比较大,特别是对于WordPress这样所有的访问都会经过url rewrite的系统。
要对虚拟目录实现url重写,只需在虚拟机的配置中加入如下内容
#AllowOverride FileInfo Options
AllowOverride FileInfo Options
.htaccess文件是针对目录的,对不同目录可以有不同的重写规则