Как мне обработать отсутствующий файл RewriteMap?

Я определяю RewriteMap в моей конфигурации Apache httpd. (Это работает правильно.)

RewriteMap redirects-list txt:/path/to/redirects.txt

Но когда файл карты ( /path/to/redirects.txt ) не существует, сервер выдает ошибку:

RewriteMap: файл для карты список редиректов не найден: /path/to/redirects.txt

Я хочу сделать этот отказоустойчивым, где RewriteMap устанавливается тогда и только тогда, когда файл существует.

(Для Например, если его не существует, возможно, есть способ автоматически использовать резервный вариант, пустой файл, например / dev / null .)

Буду признателен за любую помощь.

1
задан 20 February 2019 в 02:37
2 ответа

Кажется, нет способа установить RewriteMap условно . Я попытался установить RewriteMap в директиве , используя выражение Apache для проверки существования файла. Например:

<If "-f '/path/to/redirects.txt'">
    RewriteMap redirects-list txt:/path/to/redirects.txt
</If>

Однако это синтаксически неверно, и сервер не сможет запуститься с ошибкой:

RewriteMap здесь не разрешен

Как уже говорилось, вы должны протестировать конфигурацию перед (повторным) запуском сервера Apache.


Стоит отметить, что если есть зависимые директивы, которые используют эту (несуществующую) RewriteMap , тогда они просто не будут работать без предупреждения. (Даже при перезаписи LogLevel:trace6 , похоже, в этом отношении не было зарегистрировано ничего значимого?). Таким образом, отказ сервера при запуске, когда файл карты не существует, кажется лучшим вариантом (даже если удаление файла карты позже не приводит к «ошибке»).

2
ответ дан 3 December 2019 в 17:32

Используйте настоящий пустой файл или файл с комментариями.Изменения в файле будут распознаваться Apache без необходимости перезагрузки / перезапуска.

https://httpd.apache.org/docs/2.4/rewrite/rewritemap.html#txt

Кэшированные запросы

искомые ключи кэшируются httpd до тех пор, пока не изменится mtime (время изменения) файла карты или пока сервер httpd не будет перезапущен. Это обеспечивает лучшую производительность на картах, которые вызываются многими запросами.

Отсутствующий файл RewriteMap является ошибкой (apachectl configtest) и / dev / null , поскольку файл работает, но это плохой стиль. В этом случае было бы лучше прокомментировать эти строки в вашей конфигурации.

2
ответ дан 3 December 2019 в 17:32

Теги

Похожие вопросы