我一直在使用 RewriteMap dbm,我能够使用文本版本但是无法弄清楚我如何或为什么会收到下面描述的错误。
虚拟主机:
<VirtualHost *:80>
DocumentRoot /var/www/sites/me
ServerName domain.com
RewriteEngine On
RewriteMap examplemap "dbm:/etc/httpd/conf/redirects.db"
RewriteRule (.*) ${examplemap:$1}
</VirtualHost>
当我尝试重新启动 httpd 时,它会引发错误:
[root@mail me]# httpd -t
AH00526: Syntax error on line 367 of /etc/httpd/conf/httpd.conf:
RewriteMap: file for map examplemap not found:/etc/httpd/conf/redirects.dbm.dir
.dir 来自哪里?
我创建了一个 httxt2dbm 文件 redirects.db.dir ,这使错误消失了。
几个问题,如果我编辑行:
RewriteMap examplemap "dbm:/etc/httpd/conf/redirects.db"
至:
RewriteMap examplemap "dbm:/etc/httpd/conf/redirects.db.dir"
我得到:
RewriteMap: file for map examplemap not found:/etc/httpd/conf/redirects.dbm.dir.dir
第二个问题:
[root@mail me]# tail -f /var/log/httpd/error_log
[Wed Sep 19 20:32:42.282075 2018] [rewrite:error] [pid 4136] (2)No such file or directory: [client 50.76.6.29:56744] AH00663: mod_rewrite: can't access DBM RewriteMap file /etc/httpd/conf/redirects.db.pag
页面文件来自哪里?
我怎样才能让这快乐和工作?
如果您在创建文件时将
db
(即 Berkeley DB)指定为 DBM 类型(-f DBM_TYPE
参数),那么您可能也应该在RewriteMap
指令中包含此 dbm 类型。.dir
并且.pag
不是 Berkeley DB 文件,所以我怀疑 Apache 正在SDBM
为您的重写映射使用另一个默认值(也许?)。例如:
-f db
或者,在创建数据文件时删除参数(使用httxt2dbm
),以便 Apache 使用其默认值。(除非您特别想要 Berkeley DB 文件。)