2014-11-04 80 views
0

我打算在我的网站的URL中进行调整,以获得更好的搜索引擎优化,服务器性能是一个我非常关心的问题。301重定向Apache:最好是在httpd.conf或.htaccess中执行它?

我不想重载带有许多301重定向的.htaccess文件。 在httpd.conf而不是.htaccess中使用它会更好吗?

在每个html请求中读取.htaccess文件,但是,在启动apache时,httpd.conf文件只加载一次。那是对的吗? 如果是这样,那么服务器性能负载重定向规则只会改进一次吗?

回答

1

htaccess文件被缓存除非它被修改(有些依赖于主机操作系统和文件系统),所以它不会被加载每个请求。但是,apache文档表明,与在htaccess文件中使用指令相比,通常在server/vhost配置中的指令更快。

参见:http://httpd.apache.org/docs/current/howto/htaccess.html

一般情况下,你应该只使用.htaccess文件时,您不必访问主服务器配置文件。例如,有一种常见的误解,认为用户身份验证应该始终在.htaccess文件中完成,并且在最近几年,另一个误解是mod_rewrite指令必须在.htaccess文件中进行。这根本不是那么回事。您可以将用户身份验证配置置于主服务器配置中,事实上,这是做事的首选方式。同样,在许多方面,mod_rewrite指令在主服务器配置中工作得更好。

.htaccess文件应该用于内容提供者需要在每个目录基础上对服务器进行配置更改但在服务器系统上没有超级用户访问权的情况。如果服务器管理员不愿意频繁进行配置更改,可能需要允许单个用户在.htaccess文件中为自己做出这些更改。例如,在ISP在单台机器上托管多个用户站点并希望其用户能够更改其配置的情况下尤其如此。

但是,一般情况下,尽可能避免使用.htaccess文件。您可能会考虑放入.htaccess文件的任何配置,都可以在您的主服务器配置文件的一个部分中进行。

避免使用.htaccess文件有两个主要原因。

其中第一个是性能。当AllowOverride设置为允许使用.htaccess文件时,httpd将在每个目录中查找.htaccess文件。因此,允许.htaccess文件会导致性能下降,无论您是否实际使用它们!而且,每次请求文档时都会加载.htaccess文件。

此外请注意,httpd必须在所有更高级别的目录中查找.htaccess文件,以获得完整的必须应用的指令。 (参见如何应用指令部分)。因此,如果一个文件被请求了目录/网络/ htdocs中/例如,httpd的必须查找以下文件:

/.htaccess /www/.htaccess /www/htdocs/.htaccess /www/htdocs/example/.htaccess

因此,对于每一个文件访问超出该目录,即使没有这些文件存在,也有4个额外的文件系统访问。 (请注意,只有在.htaccess文件启用了/时才会出现这种情况,这通常不是这种情况。)

对于RewriteRule指令,在.htaccess上下文中,这些正则表达式必须用对目录的每个请求重新编译,而在主服务器配置上下文中,它们会被编译一次并被缓存。此外,规则本身更复杂,因为必须解决每个目录上下文和mod_rewrite带来的限制。有关此主题的更多详细信息,请参阅“重写指南”。

第二个考虑是安全性。您允许用户修改服务器配置,这可能导致您无法控制的更改。仔细考虑是否要为用户提供这种特权。还要注意的是,给用户的权限比他们需要的少,这将导致额外的技术支持请求。确保你清楚地告诉你的用户你赋予他们什么样的特权。准确地指定你已经设置了AllowOverride的内容,并将它们指向相关文档,以后可以为你节省很多困惑。