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


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

header('HTTP/1.0 403 Forbidden');

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

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

Author: alex, 2011-02-21

12 answers

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

 17
Author: Ibrahim AshShohail, 2016-07-13 18:52:38

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

header('HTTP/1.0 403 Forbidden');

echo 'You are forbidden!';

forbidden

 46
Author: alex, 2011-02-21 02:21:33

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

http_response_code(403);
die('Forbidden');
 18
Author: Marcio Mazzucato, 2017-07-01 19:48:51

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

header("HTTP/1.1 403 Forbidden" );

Затем скрипт отправляет "ошибка, ошибка, ошибка, ошибка, ошибка...", поэтому вы должны остановить его. Вы можете использовать

exit;

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

Не забывайте: это эмулирует ошибку, но вы должны установить ее в файле .htaccess с помощью

ErrorDocument 403 /error403.php
 16
Author: Pyrrha, 2016-06-07 02:39:56

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

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

Если вы вызываете с помощью

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

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

 4
Author: Jiju Thomas Mathew, 2016-12-11 04:24:30

.htaccess

ErrorDocument 403     /403.html
 3
Author: , 2011-02-21 02:31:49

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

  1. Перейдите на реальную страницу 403 вашего сервера. (Перейдите по запрещенному URL-адресу на вашем сервере или перейдите на любую страницу 403, которая вам нравится)
  2. Щелкните правой кнопкой мыши и выберите "просмотреть источник". Выберите весь источник и сохраните его в файл на вашем домене, например: http://domain.com/403.html
  3. теперь перейдите на свою настоящую запрещенную страницу (или запрещенную ситуацию в какой-то части вашего php) пример: http://domain.com/members/this_is_forbidden.php
  4. Повторите этот код ниже перед любым выводом HTML или заголовком! (даже пробел приведет к тому, что PHP отправит HTML/текстовый 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.

 2
Author: Tarik, 2016-09-22 20:13:04

Чтобы свести к минимуму обязанности сервера, сделайте это просто:

. htaccess-процесс

ErrorDocument 403 "Forbidden"

PHP

header('HTTP/1.0 403 Forbidden');

die(); // or your message: die('Forbidden');
 1
Author: virtual_cia, 2014-03-27 17:03:09

Используйте ModRewrite:

RewriteRule ^403.html$ - [F]

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

 1
Author: Jay Sudo, 2015-02-01 22:46:29

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

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

 0
Author: labemi, 2014-11-27 15:22:35

Обновите страницу после отправки 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>
 -2
Author: Richard, 2014-10-12 06:08:09

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

header('Location: my403page.html');

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

header('HTTP/1.0 403 Forbidden');

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

header('HTTP/1.0 403 Forbidden');
include('my403page.html');
 -4
Author: barners, 2014-07-08 11:10:45