Как избавиться от редиректа в .htaccess ErrorDocument?

Есть домен с кучей поддоменов с разнообразыми движками, в том числе и самописными. Для всех поддоменов хочу сделать одну страницу-обработчик ошибок 404, 403 и прочих. Пишу в .htaccess каждого поддомена ErrorDocument 404 http://dev.domain/error/404

При открытии sub1.domain/blabla происходит 302-редирект на страницу dev.domain/error/404, что совсем не есть хорошо.


Можно ли избавиться от редиректа, подсовывая пользователю страницу-обработчик с другого домена?


Или я вообще не в ту сторону копаю, и это делается как-то по другому?
  • Вопрос задан
  • 4616 просмотров
Решения вопроса 1
admhome
@admhome
html, css, js. php, ubuntu
кусок моего apache2.conf

Alias /error/ "/home/hosting/ERROR_PAGES/"

<Directory "/home/hosting/ERROR_PAGES">
AllowOverride None
Options IncludesNoExec
Order allow,deny
Allow from all
/* здесь закрывашка Directory, но спасибо хабрапарсеру и ограничениям использования подсветки синтаксиса с моей кармой за то, что не могу нормально написать закрывающий тэг */

ErrorDocument 400 /error/error_400.html
ErrorDocument 401 /error/error_401.html
и по аналогии всё остальное
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
admhome
@admhome
html, css, js. php, ubuntu
ЕМНИП можно же просто в httpd.conf (apache2.conf) прописать ErrorDocument директивы и не редиректить на домен, а отдавать страницы из одного каталога. Когда у меня был только apache2 (без nginx перед ним) то у меня так и было сделано.
Ответ написан
@meefa
Хоть и прошло более трех лет с момента вопроса, но решение оказалось очень простым и я не мог не поделиться.

Нужно указывать не абсолютный путь на 404 страницу, а относительный. В вашем случае должно быть
ErrorDocument 404 /error/404
вместо
ErrorDocument 404 http://dev.domain/error/404

httpd.apache.org/docs/current/mod/core.html#errord...
Note that when you specify an ErrorDocument that points to a remote URL (ie. anything with a method such as http in front of it), Apache HTTP Server will send a redirect to the client to tell it where to find the document, even if the document ends up being on the same server. This has several implications, the most important being that the client will not receive the original error status code, but instead will receive a redirect status code. This in turn can confuse web robots and other clients which try to determine if a URL is valid using the status code.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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