Я определяю RewriteMap
в моей конфигурации Apache httpd. (Это работает правильно.)
RewriteMap redirects-list txt:/path/to/redirects.txt
Но когда файл карты (/path/to/redirects.txt
) не существует, сервер выдает ошибку:
RewriteMap: файл для списка перенаправлений карты не найден: /path/to/redirects.txt
Хочу сделать этот отказоустойчивым там, где RewriteMap
устанавливается тогда и только тогда, когда файл существует.
(Например, если его не существует, возможно, есть способ автоматически использовать резерв, пустой файл, например /dev/null
.)
Буду признателен за любую помощь.
Кажется, нет способа установить RewriteMap
условно. Я попытался установить RewriteMap
в <If>
директива с использованием выражения Apache для проверки существования файла. Например:
<If "-f '/path/to/redirects.txt'">
RewriteMap redirects-list txt:/path/to/redirects.txt
</If>
Однако это синтаксически неверно, и сервер не сможет запуститься из-за ошибки:
RewriteMap здесь запрещен
Как уже говорилось, вы должны протестировать конфигурацию перед (повторным) запуском сервера Apache.
Стоит отметить, что если есть зависимые директивы, которые используют это (не существует) RewriteMap
тогда они просто потерпят неудачу. (Даже с LogLevel rewrite:trace6
похоже, что в этом отношении не зарегистрировано ничего значимого?). Таким образом, если сервер не запускается, когда файл карты не существует, может показаться лучшим вариантом (даже если удалить файл карты потом не приводит к "ошибке").
Используйте настоящий пустой файл или файл с комментариями. Apache распознает изменения в файле без перезагрузки / перезапуска.
https://httpd.apache.org/docs/2.4/rewrite/rewritemap.html#txt
Кешированные поиски
Найденные ключи кэшируются httpd до тех пор, пока не изменится mtime (время изменения) файла карты или пока сервер httpd не будет перезапущен. Это обеспечивает лучшую производительность на картах, вызываемых множеством запросов.
Отсутствующий файл RewriteMap является ошибкой (apachectl configtest) и /dev/null
как файл работает, но это плохой стиль. В этом случае было бы лучше прокомментировать эти строки в вашем config.