重写地图 dbm .dir .pag

重写地图 dbm .dir .pag

我一直在使用 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

pag 文件来自哪里?

我怎样才能让这一切快乐并有效?

答案1

是的,仅创建了一个文件:

httxt2dbm -f db -i /etc/httpd/conf/redirects.txt -o /etc/httpd/conf/redirects.db

如果您在创建文件时指定db(即 Berkeley DB)作为 DBM 类型(参数),那么您可能也应该在指令中包含此 dbm 类型。并且不是 Berkeley DB 文件,因此我怀疑 Apache 正在为您的重写映射使用另一个默认值(也许?)。-f DBM_TYPERewriteMap.dir.pagSDBM

例如:

RewriteMap examplemap "dbm=db:/etc/httpd/conf/redirects.db"

或者,-f db在创建数据文件时删除该参数(使用httxt2dbm),以便 Apache 使用它的默认(除非您特别想要 Berkeley DB 文件。)

相关内容