Apache:处理数千个永久重定向的最佳方法是什么?

uck*_*ker 23 httpd.conf 301-redirect apache-2.2

我们有一个 3000 301 重定向的列表。我们需要帮助

  1. 把这些放在什么地方最好?似乎将这 3000 行放在 httpd.conf 中的 vhost 中会是一团糟。
  2. 处理数千个网址的推荐方法是什么?
  3. 它会在多大程度上影响页面加载速度和 apache 服务器负载?

谢谢。

Tom*_*zky 32

您可以使用Include指令 inhttpd.conf来维护另一个文件中的重定向。但这不会非常有效,因为每个请求都需要根据大量正则表达式进行检查。每次更改文件后都需要重新启动服务器。

对于如此多的重定向,更好的方法是使用RewriteMap类型的指令dbm来声明从 URI 到重定向的映射。这样它会很有效,因为 dbm 查找非常快,并且在地图更改后您不需要重新启动服务器,因为httpd检查地图文件修改时间。

重写规则如下所示(在我的 Fedora 16 计算机上测试):

RewriteEngine On
RewriteMap redirects dbm=db:/etc/httpd/conf/redirects.db
RewriteCond ${redirects:$1} !=""
RewriteRule ^(.*)$ ${redirects:$1} [redirect=permanent,last]
Run Code Online (Sandbox Code Playgroud)

并且 dbm 地图将从文本地图创建,/etc/httpd/conf/redirects.txt如下所示:

/foo http://serverfault.com/
/bar/lorem/ipsum/ http://stackoverflow.com/
Run Code Online (Sandbox Code Playgroud)

使用命令

httxt2dbm -f db -i /etc/httpd/conf/redirects.txt -o /etc/httpd/conf/redirects.db
Run Code Online (Sandbox Code Playgroud)