Answers:
您可以使用Include
指令in httpd.conf
来维护另一个文件中的重定向。但这不是非常有效,因为每个请求都需要对照许多正则表达式进行检查。此外,每次更改文件后都需要重新启动服务器。
进行大量重定向的更好方法是使用Type的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]
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
!=
和之间不能有空格""
-我已将示例更正为可以运行且经过测试的版本。
RewriteMap redirects dbm=db:/etc/httpd/conf/redirects.db
给了错误RewriteMap dbm type db is invalid
。但是,当我使用RewriteMap redirects txt:/etc/httpd/conf/redirects.txt
它的时候。我仍然希望采用像您解释的哈希方式,而不是纯文本。但是我找不到太多有关dbm错误的信息。谢谢你的帮助。