我打算在我网站的网址上进行调整,以获得更好的搜索引擎优化和服务器性能,这是我非常关心的一个问题。
我不希望使用许多301重定向重载.htaccess文件。 在httpd.conf而不是.htaccess中更好吗?
在每个html请求中读取.htaccess文件,但是,httpd.conf文件在启动apache时只加载一次。那是对的吗? 如果是这样,那么服务器性能负载重定向规则只会改进一次吗?
答案 0 :(得分:2)
htaccess文件被缓存,除非它被修改(在某种程度上取决于主机操作系统和文件系统),因此不会为每个请求加载它。但是,apache文档说服务器/ vhost配置中的指令通常更快,而不是在htaccess文件中有指令。
请参阅:http://httpd.apache.org/docs/current/howto/htaccess.html
通常,只有在无法访问主服务器配置文件时才应使用.htaccess文件。例如,有一种常见的误解,即用户身份验证应始终在.htaccess文件中完成,并且在最近几年,另一种误解是mod_rewrite指令必须放在.htaccess文件中。这根本不是那么回事。您可以将用户身份验证配置放在主服务器配置中,事实上,这是执行操作的首选方式。同样,mod_rewrite指令在许多方面在主服务器配置中更好地工作。
.htaccess文件应该用于内容提供商需要在每个目录的基础上对服务器进行配置更改但在服务器系统上没有root访问权限的情况。如果服务器管理员不愿意频繁进行配置更改,则可能需要允许各个用户自己在.htaccess文件中进行这些更改。例如,在ISP在一台计算机上托管多个用户站点并希望其用户能够更改其配置的情况下尤其如此。
但是,通常,应尽可能避免使用.htaccess文件。您考虑放入.htaccess文件的任何配置都可以在主服务器配置文件的一个部分中有效地进行。
避免使用.htaccess文件有两个主要原因。
首先是表现。当AllowOverride设置为允许使用.htaccess文件时,httpd将在每个目录中查找.htaccess文件。因此,允许.htaccess文件会导致性能下降,无论您是否真正使用它们!此外,每次请求文档时都会加载.htaccess文件。
进一步注意,httpd必须在所有更高级别的目录中查找.htaccess文件,以便拥有必须应用的完整指令。 (请参阅有关如何应用指令的部分。)因此,如果从目录/ www / htdocs / example中请求文件,httpd必须查找以下文件:
/.htaccess /www/.htaccess /www/htdocs/.htaccess /www/htdocs/example/.htaccess
因此,对于该目录中的每个文件访问,即使这些文件都不存在,也有4个额外的文件系统访问。 (请注意,只有.htaccess文件为/启用时才会出现这种情况,通常情况并非如此。)
对于RewriteRule指令,在.htaccess上下文中,必须使用对目录的每个请求重新编译这些正则表达式,而在主服务器配置上下文中,它们将被编译一次并缓存。此外,规则本身更复杂,因为必须解决每个目录上下文和mod_rewrite带来的限制。有关此主题的更多详细信息,请参阅“重写指南”。
第二个考虑因素是安全问题。您允许用户修改服务器配置,这可能导致您无法控制的更改。仔细考虑是否要为您的用户提供此权限。另请注意,为用户提供的权限少于他们所需的权限将导致其他技术支持请求。确保清楚地告诉用户您给予他们的权限级别。准确地指定你设置AllowOverride的内容,并将它们指向相关的文档,以后会为你节省很多困惑。