Подтвердить что ты не робот

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

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

header('HTTP/1.0 403 Forbidden');

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

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

4b9b3361

Ответ 1

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

Ответ 2

Просто отправьте эхо ваш контент после отправки заголовка.

header('HTTP/1.0 403 Forbidden');

echo 'You are forbidden!';

forbidden

Ответ 3

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

header("HTTP/1.1 403 Forbidden" );

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

exit;

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

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

ErrorDocument 403 /error403.php

Ответ 4

http_response_code был введен в PHP 5.4 и упростил ситуацию!

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

Ответ 5

.htaccess

ErrorDocument 403     /403.html

Ответ 6

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

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

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

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

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

Ответ 7

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

.htaccess

ErrorDocument 403 "Forbidden"

PHP

header('HTTP/1.0 403 Forbidden');

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

Ответ 8

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

RewriteRule ^403.html$ - [F]

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

Ответ 9

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

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

        <?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.

Ответ 10

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

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

Ответ 11

Обновите страницу после отправки 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>

Ответ 12

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

header('Location: my403page.html');

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

header('HTTP/1.0 403 Forbidden');

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

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