apache — создайте пользовательские страницы ошибок PHP в cPanel, не перенаправляя их со страницы, которая вызвала ошибку

Я пытаюсь сделать так, чтобы на моем веб-сервере были настроены ошибочные документы / страницы, но с PHP код, включенный в них, без перенаправления их со страницы, на которой возникла ошибка.

Допустим, мы идем к http://website.com/pages/1 и это было скинуть ошибку 500, по дефолт страница будет просто пустой белой страницей с текстомError 500 (Internal Server Error)«который будет выглядеть примерно так:

http://i.imgur.com/WLO7JkL.png

Как видно из вышесказанного, он НЕ перенаправлен со страницы, на которой возникла ошибка. Я хочу, чтобы эта страница выглядела «часть сайта» но с включенным в них содержимым PHP.

Я не могу включить содержимое PHP в страницы ошибок в cPanel, отредактировав страницы, которые вы видите ниже:

http://i.imgur.com/jtYjHj8.png

Если бы я должен был изменить ошибку 500 на странице выше, с содержанием ниже проблема была бы в том, что http://website.com/pages/1 будет перенаправлять на http://website.com/500.shtml а затем в свою очередь перенаправить на http://website.com/500.php

я делаю НЕ хотите, чтобы он вообще перенаправлял, иначе это означает, что обновление страницы по сути просто обновит страницу 500.php, а не обновление /pages/1

<script language="javascript">
window.location.href = "http://www.website.com/500.php"</script>
<meta http-equiv="refresh" content="0;URL='http://website.com/500.php'" />

Точно такая же проблема будет существовать, просто без 2-х цепочечных перенаправлений вместо этого будет просто 1-редирект с использованием следующего в файле .htaccess.

ErrorDocument 400 http://website.com/400.php
ErrorDocument 401 http://website.com/401.php
ErrorDocument 403 http://website.com/403.php
ErrorDocument 404 http://website.com/404.php
ErrorDocument 500 http://website.com/500.php

Текущий результат: Перенаправление на /500.php

Ожидаемый результат: отображение 500.php в / в http://website.com/pages/1 без перенаправления

Есть ли способ сделать это через root (могу ли я заставить своих хостов что-то сделать, если да, то что?)

9

Решение

Поскольку другие ответили, это должно работать:

ErrorDocument 500 /500.php

Если вы не укажете полный URL-адрес, он просто отобразит страницу (внутреннее перенаправление), если вы укажете полный URL-адрес, тогда он выполнит переадресацию обратно клиенту. Это как описано Apache здесь: http://httpd.apache.org/docs/2.4/mod/core.html#errordocument

Обратите внимание, что при указании ErrorDocument, который указывает на удаленный
URL (т.е. что-нибудь с таким методом, как http перед ним), Apache
HTTP-сервер отправит клиенту перенаправление, чтобы сообщить ему, куда
найти документ, даже если документ окажется на том же
сервер.

Тот факт, что вышеупомянутое не работает для вас, означает одно из нескольких:

  1. Вы делаете это неправильно и по-прежнему указываете полный URL, даже если вы заявляете, что это не так.
  2. Cpanel добавляет полный URL-адрес (не уверен, как вы редактируете файл .htaccess или если это сделано через графический интерфейс выше).
  3. Ваш файл .htaccess игнорируется (возможно, потому что вы устанавливаете значения в графическом интерфейсе или, возможно, потому что FileInfo не установить на уровне сервера, так что это не может быть указано в файле .htaccess (см. здесь: http://httpd.apache.org/docs/2.4/custom-error.html), в этом случае он должен забрать сам полный URL из другого конфига где-нибудь.
  4. Скрипт 500.php сам выполняет перенаправление (должно быть очевидно из инструментов разработчика, если сохранить журнал и посмотреть, возвращена ли одна страница или две).
  5. В Apache есть ошибка (о которой я и другие не знаем).
  6. магия

Можете ли вы проверить эти вещи?

Может также помочь узнать, на какой версии Apache вы работаете?

Также вы пробовали простой файл 500.html, чтобы посмотреть, работает ли он без перенаправления? Теоретически файл 500.php тоже должен быть в порядке, но было бы интересно сузить его (и также показать, будет ли выбрано и использовано это изменение в 500.html или оно все еще указывает на 500.php, что, возможно, показать, что это было взято из другого конфига, чем вы думаете).

1

Другие решения

Если вы добавите что-то подобное в ваш файл .htaccess, он должен просто отобразить страницу с ошибкой без перенаправления. Я никогда не использовал абсолютные пути, как вы делаете в своем примере для страниц с ошибками, поэтому я не уверен, какое поведение это вызывает

ErrorDocument 404 /404.php
0