Eu tenho trabalhado com o RewriteMap dbm, consegui a versão de texto funcionando, mas não consigo descobrir como ou por que estou recebendo o erro descrito abaixo.
O host virtual:
<VirtualHost *:80>
DocumentRoot /var/www/sites/me
ServerName domain.com
RewriteEngine On
RewriteMap examplemap "dbm:/etc/httpd/conf/redirects.db"
RewriteRule (.*) ${examplemap:$1}
</VirtualHost>
Quando tento reiniciar o httpd, ele gera um erro:
[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
De onde vem o .dir?
Criei um arquivo httxt2dbm redirects.db.dir e isso fez com que o erro desaparecesse.
Alguns problemas, se eu editar a linha:
RewriteMap examplemap "dbm:/etc/httpd/conf/redirects.db"
Para:
RewriteMap examplemap "dbm:/etc/httpd/conf/redirects.db.dir"
Eu recebo:
RewriteMap: file for map examplemap not found:/etc/httpd/conf/redirects.dbm.dir.dir
Segundo problema:
[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
De onde vem o arquivo pag?
Como faço isso feliz e trabalho?
Se você estiver especificando
db
(por exemplo, Berkeley DB) como o tipo de DBM (-f DBM_TYPE
argumento) ao criar o arquivo, provavelmente também deverá incluir esse tipo de dbm naRewriteMap
diretiva..dir
e.pag
não são arquivos Berkeley DB, então suspeito que o Apache esteja usando outro padrão (talvezSDBM
?) para seu mapa de reescrita.Por exemplo:
Como alternativa, remova o
-f db
argumento ao criar seu arquivo de dados (usandohttxt2dbm
) para que o Apache use seu padrão . (A menos que você queira especificamente arquivos Berkeley DB.)