Используя apache 2.4 в Linux, с несколькими виртуальными серверами, каждый виртуальный сервер со своим собственным DocumentRoot, я хотел бы, чтобы локальное перенаправление ErrorDocument главного сервера apache выполняло один скрипт Perl, относящийся к основному DocumentRoot apache, а не скрипт perl под каждым виртуальный сервер.
Что происходит, так это то, что для построения пути к файловой системе используется корень документа виртуального сервера, а не корень документа главного сервера.
Есть ли способ настроить сервер apache для использования только одного локального сценария перенаправления вместо (по-видимому) необходимости иметь (идентичный) сценарий в DocumentRoot каждого виртуального сервера?
Вы можете установить единый глобальный документ об ошибке, разместив следующие директивы в глобальном (серверном) контексте (т.е. не внутри какого-либо блока <VirtualHost>). Затем он будет работать для всех ваших виртуальных хостов. Это показывает вам статический HTML-файл, но его можно легко изменить, чтобы вместо этого он стал сценарием perl.
Alias /error-404.html /path/to/my/errors/error-404.html ErrorDocument 404 /error-404.html <Directory "/path/to/my/errors"> require all granted </Directory>
Вы можете установить ErrorDocument как внешний ресурс, например.
ErrorDocument 500 http://error.example.com/server_error.html
Таким образом, вы можете просто сослаться на скрипт на своем основном виртуальном хосте.
Вы не поверите, но это задокументировано в документация для ErrorLog.