Назад | Перейти на главную страницу

RewriteMap 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?

Как мне сделать это счастливым и работать?

Да, был создан только один файл:

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.)