Эмуляция страницы ошибки 403

Я знаю, что вы можете отправить заголовок, который сообщает браузеру, что эта страница запрещена, например:

header('HTTP/1.0 403 Forbidden');

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

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

12 ответов


включите пользовательскую страницу ошибки после изменения заголовка.


просто повторите свой контент после отправки заголовка.

header('HTTP/1.0 403 Forbidden');

echo 'You are forbidden!';

forbidden


http_response_code был введен в PHP 5.4 и сделал вещи намного проще!

http_response_code(403);
die('Forbidden');

для этого вы должны сначала сказать для браузера, что пользователь получает ошибку 403. Для этого вы можете использовать этот код:

header("HTTP/1.1 403 Forbidden" );

затем скрипт отправляет " error, error, error, error, error.......- значит, ты должен это прекратить. Вы можете использовать

exit;

С помощью этих двух строк сервер отправляет ошибку и останавливает скрипт.

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

ErrorDocument 403 /error403.php

видел много ответов, но правильный-предоставить полные параметры для вызова функции заголовка в соответствии с руководством php

void header ( string $string [, bool $replace = true [, int $http_response_code ]] )

Если вы вызываете с

header('HTTP/1.0 403 Forbidden', true, 403);

нормальное поведение HTTP 403, настроенное с Apache или любым другим сервером, будет следовать.


.реврайт

ErrorDocument 403     /403.html

Я прочитал все ответы здесь, и ни один из них не был полным ответом на мою ситуацию (которая точно такая же в этом вопросе), поэтому вот как я собрал некоторые части предложенных ответов и придумал точное решение:

  1. Земля на реальной странице 403 вашего сервера. (Перейдите на запрещенный URL-адрес на вашем сервере или на любую страницу 403, которая вам нравится)
  2. щелкните правой кнопкой мыши и выберите 'Просмотр источника'. Выберите весь источник и сохраните его в файле в своем домене, как: http://domain.com/403.html
  3. Теперь перейдите на вашу реальную запрещенную страницу (или запрещенную ситуацию в какой-то части вашего php) пример:http://domain.com/members/this_is_forbidden.php
  4. Эхо этот код ниже до любой вывод HTML или заголовок! (даже пробел заставит PHP отправлять html / TEXT HTTP-заголовок, и он не будет работать) Код ниже должен быть вашим первый линия!

        <?php header('HTTP/1.0 403 Forbidden');
        $contents = file_get_contents('/home/your_account/public_html/domain.com/403.html', TRUE);
        exit($contents);
    

теперь у вас есть точное решение. Я проверил и проверил с последними посетителями CPANEL, и он зарегистрирован как точное 403 событие.


чтобы минимизировать обязанности сервера, сделайте его простым:

.реврайт

ErrorDocument 403 "Forbidden"

PHP

header('HTTP/1.0 403 Forbidden');

die(); // or your message: die('Forbidden');

Использовать ModRewrite:

RewriteRule ^403.html$ - [F]

просто убедитесь, что вы создаете пустой документ под названием "403.html " в вашем корне www или вы получите ошибку 404 вместо 403.


Я понимаю, что у вас есть сценарий с ErrorDocument, уже определенным в вашем Apache conf или .htaccess и хотите, чтобы эти страницы появлялись при ручной отправке кода состояния 4xx через php.

к сожалению, это невозможно с помощью распространенных методов, потому что php отправляет заголовок непосредственно в браузер пользователя (а не на веб-сервер Apache), тогда как ErrorDocument является обработчиком отображения состояния http, созданного из Apache.


обновите страницу после отправки 403:

<?php 
header('HTTP/1.0 403 Forbidden');
?>
<html><head>
<meta http-equiv="refresh" content="0;URL=http://my.error.page">
</head><body></body></html>

Alex, вы можете перенаправить на свою пользовательскую страницу, используя такой заголовок:

header('Location: my403page.html');

и убедитесь, что на странице 403 вы включаете исходный код заголовка:

header('HTTP/1.0 403 Forbidden');

кроме того, вы можете просто создать заголовок и включить страницу 403 следующим образом:

header('HTTP/1.0 403 Forbidden');
include('my403page.html');