Answers:
Apache项目的建议是:
通常,仅在无权访问主服务器配置文件时才应使用.htaccess文件。... 一个常见的误解是用户身份验证和mod_rewrite指令必须放在
.htaccess
文件中。
因此,请同时AllowOverride None
在主httpd.conf(和/或您的小节Include
)中设置和所有其他指令。
当Apache是没有配置与AllowOverride None
您已发生(未成年人)的性能损失,无论羯羊或没有任何.htaccess
正在使用的文件。
这是因为对于每个请求, apache将需要检查.htaccess
每个(子)目录中是否存在潜在文件,该文件可导致请求的资源。例如,当从目录/ www / htdocs / example中请求文件时,apache必须查找以下文件:
/.htaccess
/www/.htaccess
/www/htdocs/.htaccess
/www/htdocs/example/.htaccess
因此,对于该目录之外的每个文件访问,将有4个其他文件系统访问,即使这些文件都不存在。(如果为/设置了AllowOveride)
仅用于(man 2 stat
)的系统调用并不昂贵,通常使用文件系统缓存而不是轮询实际磁盘,从而限制了实际的IO需求,但正如本文所述,它仍然可以累加。
当.htaccess
实际存在一个或多个实际文件时,apache仍需要对其open
进行读取(触发另一IO读取操作,通常还需要IO写入操作以更新文件系统atime
属性)并解析它,然后才能应用其中的逻辑。
与您的指令位于main中时不同httpd.conf
,该指令仅需要apache解析一次,在启动时,每个.htaccess
文件都需要为每个请求重新解释。
除了IO操作外,解析.htaccess文件的开销取决于其复杂性。
将需要仔细确定基准。
我认为您的问题没有一个正确的答案。有很多会影响htaccess加载时间的变量:
更多信息:
我已经测试了有没有.htaccess,并且在速度或开销上都没有任何区别。当然,我只运行16个站点,而且它是一台超快速的服务器,因此在我看来,跟踪毫秒几乎是不可能的。在运行数百个站点的服务器上,开销可能很明显,因此@Iain表示要测试一下。
我个人使用.conf文件作为虚拟主机来执行所有操作,而不是使用.htaccess进行操作,它使我可以对所有内容进行绝对控制,它更干净,并且一次加载到apache的内存中。甚至我的wordpress重写规则都在我的.conf文件中,因此它永远不会中断。