Я работал с 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?
Как мне сделать это счастливым и работать?
Да, был создан только один файл:
httxt2dbm -f db -i /etc/httpd/conf/redirects.txt -o /etc/httpd/conf/redirects.db
Если вы указываете db
(например, Berkeley DB) как тип DBM (-f DBM_TYPE
аргумент) при создании файла вам, вероятно, следует включить этот тип dbm в RewriteMap
директива. .dir
и .pag
не являются файлами Berkeley DB, поэтому я подозреваю, что Apache использует другое значение по умолчанию (возможно, SDBM
?) для вашей карты перезаписи.
Например:
RewriteMap examplemap "dbm=db:/etc/httpd/conf/redirects.db"
Или удалите -f db
аргумент при создании файла данных (используя httxt2dbm
), поэтому Apache использует свой дефолт. (Если вам специально не нужны файлы Berkeley DB.)