ErrorDocument не работает с локальным файлом

Я работаю над веб-приложением, которое использую на Tomcat 6.0.18, и использую Apache 2 в качестве обратного прокси-сервера. Это прекрасно работает. Я также пытаюсь заставить Apache отображать страницы ошибок, когда, например, я отключил Tomcat для повторного развертывания и т. д. Однако директива ErrorDocument в моем httpd.conf, похоже, вообще не работает для локальных файлов. Я пробовал внешние URL-адреса и строки, и оба этих случая работают нормально. Но ниже не работает:

ErrorDocument 403 /Oops.html
ErrorDocument 404 /Oops.html
ErrorDocument 502 /Oops.html
ErrorDocument 503 /Oops.html

Файл Oops.html находится в моей папке htdocs. Вот некоторый вывод журнала из httpd, когда я пытаюсь получить доступ к приложению, когда Tomcat не запущен, но httpd работает:

==> access_log <==
localhost - - [21/Nov/2010:12:23:36 -0800] "GET /home HTTP/1.1" 503 -

==> error_log <==
[Sun Nov 21 12:23:36 2010] [debug] mod_proxy_http.c(54): proxy: HTTP: canonicalising URL //localhost:8080/home
[Sun Nov 21 12:23:36 2010] [debug] proxy_util.c(1412): [client ::1] proxy: http: found worker http://localhost:8080/ for http://localhost:8080/home
[Sun Nov 21 12:23:36 2010] [debug] mod_proxy.c(819): Running scheme http handler (attempt 0)
[Sun Nov 21 12:23:36 2010] [debug] mod_proxy_http.c(1693): proxy: HTTP: serving URL http://localhost:8080/home
[Sun Nov 21 12:23:36 2010] [debug] proxy_util.c(1790): proxy: HTTP: retrying the worker for (localhost)
[Sun Nov 21 12:23:36 2010] [error] proxy: HTTP: disabled connection for (localhost)
[Sun Nov 21 12:23:36 2010] [debug] mod_proxy_http.c(54): proxy: HTTP: canonicalising URL //localhost:8080/Oops.html
[Sun Nov 21 12:23:36 2010] [debug] proxy_util.c(1412): [client ::1] proxy: http: found worker http://localhost:8080/ for http://localhost:8080/Oops.html
[Sun Nov 21 12:23:36 2010] [debug] mod_proxy.c(819): Running scheme http handler (attempt 0)
[Sun Nov 21 12:23:36 2010] [debug] mod_proxy_http.c(1693): proxy: HTTP: serving URL http://localhost:8080/Oops.html
[Sun Nov 21 12:23:36 2010] [debug] proxy_util.c(1790): proxy: HTTP: retrying the worker for (localhost)
[Sun Nov 21 12:23:36 2010] [error] proxy: HTTP: disabled connection for (localhost)

Обратите внимание, что я не использую файл .htaccess. Кажется, есть какая-то проблема с настройками, связанными с папкой htdocs. Ниже приведены некоторые фрагменты из моего файла httpd.conf, относящиеся к папке htdocs. Я новичок в работе с Apache, поэтому не уверен, насколько это актуально и стоит ли публиковать больше.

<Directory "/usr/local/apache2/htdocs">
  Options Indexes FollowSymLinks
  AllowOverride None
  Order allow,deny
  Allow from all    
</Directory>

Любая помощь высоко ценится!

ИЗМЕНИТЬ:

Когда Tomcat работает, я вижу эти строки в журнале ошибок:

[Sun Nov 21 13:30:11 2010] [error] [client ::1] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.
[Sun Nov 21 13:30:11 2010] [debug] core.c(3046): [client ::1] r->uri = /Oops.html
[Sun Nov 21 13:30:11 2010] [debug] core.c(3052): [client ::1] redirected from r->uri = /Oops.html
[Sun Nov 21 13:30:11 2010] [debug] core.c(3052): [client ::1] redirected from r->uri = /Oops.html
[Sun Nov 21 13:30:11 2010] [debug] core.c(3052): [client ::1] redirected from r->uri = /Oops.html
[Sun Nov 21 13:30:11 2010] [debug] core.c(3052): [client ::1] redirected from r->uri = /Oops.html
[Sun Nov 21 13:30:11 2010] [debug] core.c(3052): [client ::1] redirected from r->uri = /Oops.html
[Sun Nov 21 13:30:11 2010] [debug] core.c(3052): [client ::1] redirected from r->uri = /Oops.html
[Sun Nov 21 13:30:11 2010] [debug] core.c(3052): [client ::1] redirected from r->uri = /Oops.html
[Sun Nov 21 13:30:11 2010] [debug] core.c(3052): [client ::1] redirected from r->uri = /Oops.html
[Sun Nov 21 13:30:11 2010] [debug] core.c(3052): [client ::1] redirected from r->uri = /Oops.html
[Sun Nov 21 13:30:11 2010] [debug] core.c(3052): [client ::1] redirected from r->uri = /

Что-то не так настроено, но я не знаю, что и где. Спасибо за ответы до сих пор, но все еще в тупике.


person richever    schedule 21.11.2010    source источник
comment
Есть ли у вас какие-то RewriteRules где-то по ходу, может быть, в каталоге выше по дереву или в конфигурации? .... Хотя, если подумать, это может быть рекурсия, потому что он не находит документ 404, а затем не находит документ 404 и так далее и тому подобное....   -  person Pekka    schedule 22.11.2010
comment
проверка DocumentRoot+/Ops.html = /usr/local/apache2/htdocs/Ops.html ? похоже, вы используете другой DocumentRoot   -  person ajreal    schedule 22.11.2010
comment
@ajreal: я отключил все проксирование, удалил директивы документа об ошибках и перезапустил. Я смог получить доступ к нескольким другим страницам в каталоге, который я установил как DocumentRoot, так что, похоже, он настроен правильно.   -  person richever    schedule 22.11.2010


Ответы (2)


AllowOverride не должен быть None

person user2092603    schedule 20.02.2013

Если указано в центральной конфигурации, Apache, вероятно, будет рассматривать путь как абсолютный, ища Oops.html в корневом каталоге. Попробуйте использовать полный путь:

ErrorDocument 403 /usr/local/apache2/htdocs/Oops.html

В качестве альтернативы, я думаю, если вы поместите его в раздел VirtualHost, он будет работать относительно.

Документация по ErrorDocument

person Pekka    schedule 21.11.2010
comment
Я уже пробовал оба ваших предложения, даже вместе, и я все еще ничего не получаю. Спасибо хоть. - person richever; 22.11.2010
comment
@richever странно. Вы уверены, что у веб-сервера есть права на чтение файла? - person Pekka; 22.11.2010
comment
Я пробовал другие файлы в этом каталоге, а также изменил его, чтобы он был доступен, но все равно ничего. Я собираюсь отредактировать свой пост, упомянув подозрительную строку в журнале ошибок, указывающую на неправильную конфигурацию. - person richever; 22.11.2010