我们有 3000 个 301 重定向列表。我们需要帮助
- 把它们放在哪里最好?把这 3000 行放在 httpd.conf 中的 vhost 内似乎会很乱。
- 有哪些推荐的方式来处理数千个 URL?
- 这会对页面加载速度和 Apache 服务器负载产生多大影响?
谢谢。
答案1
您可以使用Include
指令来httpd.conf
在另一个文件中维护重定向。但这样做效率不高,因为每个请求都需要根据大量正则表达式进行检查。此外,每次更改文件后都需要重新启动服务器。
对于如此多的重定向,更好的方法是使用重写映射类型的指令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]
并且 dbm 图将从文本图创建,/etc/httpd/conf/redirects.txt
如下所示:
/foo http://serverfault.com/
/bar/lorem/ipsum/ http://stackoverflow.com/
使用命令
httxt2dbm -f db -i /etc/httpd/conf/redirects.txt -o /etc/httpd/conf/redirects.db
答案2
我会编写一个脚本,仅使用列表中的链接生成一个新的 VHOST。