Как вызвать ошибку 403

I know you can send a header that tells the browser this page is forbidden like:

header('HTTP/1.0 403 Forbidden');

But how can I also display the custom error page that has been created on the server for this type of error?

By default, just sending the header displays a white page, but I remember a while back reading that you can use the customer error page. Does anybody know?

alex's user avatar

alex

477k200 gold badges877 silver badges980 bronze badges

asked Feb 21, 2011 at 2:16

NightHawk's user avatar

0

Just echo your content after sending the header.

header('HTTP/1.0 403 Forbidden');

echo 'You are forbidden!';

forbidden

answered Feb 21, 2011 at 2:21

alex's user avatar

alexalex

477k200 gold badges877 silver badges980 bronze badges

3

http_response_code was introduced in PHP 5.4 and made the things a lot easier!

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

answered Apr 25, 2017 at 14:44

Marcio Mazzucato's user avatar

Marcio MazzucatoMarcio Mazzucato

8,7418 gold badges64 silver badges78 bronze badges

Include the custom error page after changing the header.

showdev's user avatar

showdev

28.2k37 gold badges53 silver badges72 bronze badges

answered Feb 21, 2011 at 2:30

Ibrahim AshShohail's user avatar

3

For this you must first say for the browser that the user receive an error 403. For this you can use this code:

header("HTTP/1.1 403 Forbidden" );

Then, the script send «error, error, error, error, error…….», so you must stop it. You can use

exit;

With this two lines the server send an error and stop the script.

Don’t forget : that emulate the error, but you must set it in a .htaccess file, with

ErrorDocument 403 /error403.php

Justine Krejcha's user avatar

answered Apr 18, 2013 at 17:26

Pyrrha's user avatar

PyrrhaPyrrha

2112 silver badges2 bronze badges

0

Seen a lot of the answers, but the correct one is to provide the full options for the header function call as per the php manual

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

If you invoke with

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

the normal behavior of HTTP 403 as configured with Apache or any other server would follow.

answered Dec 11, 2016 at 4:24

Jiju Thomas Mathew's user avatar

I have read all the answers here and none of them was complete answer for my situation (which is exactly the same in this question) so here is how I gathered some parts of the suggested answers and come up with the exact solution:

  1. Land on your server’s real 403 page. (Go to a forbidden URL on your server, or go to any 403 page you like)
  2. Right-click and select ‘view source’. Select all the source and save it to file on your domain like: http://domain.com/403.html
  3. now go to your real forbidden page (or a forbidden situation in some part of your php) example: http://domain.com/members/this_is_forbidden.php
  4. echo this code below before any HTML output or header! (even a whitespace will cause PHP to send HTML/TEXT HTTP Header and it won’t work)
    The code below should be your first line!

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

Now you have the exact solution. I checked and verified with CPANEL Latest Visitors and it is registered as exact 403 event.

answered Oct 6, 2015 at 18:00

Tarik's user avatar

TarikTarik

4,22037 silver badges35 bronze badges

4

.htaccess

ErrorDocument 403     /403.html

answered Feb 21, 2011 at 2:31

6

To minimize the duty of the server make it simple:

.htaccess

ErrorDocument 403 "Forbidden"

PHP

header('HTTP/1.0 403 Forbidden');

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

Shahrokhian's user avatar

answered Feb 5, 2014 at 21:34

virtual_cia's user avatar

Use ModRewrite:

RewriteRule ^403.html$ - [F]

Just make sure you create a blank document called «403.html» in your www root or you’ll get a 404 error instead of 403.

answered Feb 1, 2015 at 22:46

Jay Sudo's user avatar

Jay SudoJay Sudo

991 silver badge2 bronze badges

2

I understand you have a scenario with ErrorDocument already defined within your apache conf or .htaccess and want to make those pages appear when manually sending a 4xx status code via php.

Unfortunately this is not possible with common methods because php sends header directly to user’s browser (not to Apache web server) whereas ErrorDocument is a display handler for http status generated from Apache.

answered Nov 27, 2014 at 15:22

labemi's user avatar

Refresh the page after sending the 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>

answered Oct 12, 2014 at 6:08

Richard's user avatar

1

Is it possible to kind of force a 403 or 404 error?

I have a kind of admin page, where I am trying to prevent hackers from getting into my filesystem on my server. (the path get’s delivered over the url and it would be possible to just pass a ../ into it and get up in my filestructure — I know that’s not a good thing to do it). Anyway If somebody tries to enter a ../ into my url I am currently just using a die(‘forbidden’) to make sure that this area on my server is forbidden.

I was wondering now if it’s actually possible to kind of fire a real forbidden 403 error? I’ve defined a 403 page in my .htaccess document which shows up if it’s a real 403. Is it possible to kind of fire a 403 so that the .htaccess links to the 403 page. I mean I could easily hardcode it and simply link to the 403 error page. I just wondered if this is possible?

peterh's user avatar

peterh

11.7k18 gold badges83 silver badges104 bronze badges

asked Jul 30, 2010 at 0:39

matt's user avatar

Just issue

header("HTTP/1.0 403 Forbidden");

before any other output.

Also make sure you double, and triple check your path sanitizer.

answered Jul 30, 2010 at 0:42

sukru's user avatar

sukrusukru

2,22914 silver badges15 bronze badges

3

This will send a 404 and also include your 404 page:

<?php 
header("HTTP/1.0 404 Not Found"); 
include("/var/www/html/site.domain.com/err/404.php"); 
?> 

Source: http://www.webmasterworld.com/forum88/784.htm (from google)

answered Jul 30, 2010 at 0:44

PeterL's user avatar

PeterLPeterL

1,38711 silver badges15 bronze badges

Руслан Тиляев

@Heckfy325

Начинающий программист. Простите за глупые вопросы

Здравствуйте друзья программисты!
Не могли бы вы мне помочь) Идея такая:
У меня на сайте есть регистрация, авторизация. Соответственно есть и личный кабинет пользователя. Как сделать следующее: Чтобы если пользователь не залогинен или не зарегистрирован не смог перейти в личный кабинет («ishop.loc/cabinet.html»), чтобы выходила ошибка 403
ВОТ ТАК:
5cf7c4eb1175a773072437.jpeg


  • Вопрос задан

    более трёх лет назад

  • 1208 просмотров

для yii-2.
просто для yii — не знаю. найду что-нибудь — дополню ответ.

use yiiwebHttpException;
//some code...
throw new HttpException(403/*or any code*/, 'Forbidden'/*or any message*/);

а вообще нужно делать так:

try {
  //any code
} catch (Exception $e) {
    echo 'Выброшено исключение: ',  $e->getMessage(), "n"; // any action/message
}

Пригласить эксперта

throw new yiiwebHttpException(403, 'Доступ запрещен');


  • Показать ещё
    Загружается…

04 июн. 2023, в 21:18

3000 руб./за проект

04 июн. 2023, в 20:31

10000 руб./за проект

04 июн. 2023, в 18:48

300 руб./за проект

Минуточку внимания

I know you can send a header that tells the browser this page is forbidden like:

header('HTTP/1.0 403 Forbidden');

But how can I also display the custom error page that has been created on the server for this type of error?

By default, just sending the header displays a white page, but I remember a while back reading that you can use the customer error page. Does anybody know?

alex's user avatar

alex

472k198 gold badges871 silver badges978 bronze badges

asked Feb 21, 2011 at 2:16

NightHawk's user avatar

0

Just echo your content after sending the header.

header('HTTP/1.0 403 Forbidden');

echo 'You are forbidden!';

forbidden

answered Feb 21, 2011 at 2:21

alex's user avatar

alexalex

472k198 gold badges871 silver badges978 bronze badges

3

http_response_code was introduced in PHP 5.4 and made the things a lot easier!

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

answered Apr 25, 2017 at 14:44

Marcio Mazzucato's user avatar

Marcio MazzucatoMarcio Mazzucato

8,6037 gold badges64 silver badges78 bronze badges

Include the custom error page after changing the header.

showdev's user avatar

showdev

27.9k36 gold badges53 silver badges72 bronze badges

answered Feb 21, 2011 at 2:30

Ibrahim AshShohail's user avatar

3

For this you must first say for the browser that the user receive an error 403. For this you can use this code:

header("HTTP/1.1 403 Forbidden" );

Then, the script send «error, error, error, error, error…….», so you must stop it. You can use

exit;

With this two lines the server send an error and stop the script.

Don’t forget : that emulate the error, but you must set it in a .htaccess file, with

ErrorDocument 403 /error403.php

Justine Krejcha's user avatar

answered Apr 18, 2013 at 17:26

Pyrrha's user avatar

PyrrhaPyrrha

2112 silver badges2 bronze badges

0

Seen a lot of the answers, but the correct one is to provide the full options for the header function call as per the php manual

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

If you invoke with

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

the normal behavior of HTTP 403 as configured with Apache or any other server would follow.

answered Dec 11, 2016 at 4:24

Jiju Thomas Mathew's user avatar

I have read all the answers here and none of them was complete answer for my situation (which is exactly the same in this question) so here is how I gathered some parts of the suggested answers and come up with the exact solution:

  1. Land on your server’s real 403 page. (Go to a forbidden URL on your server, or go to any 403 page you like)
  2. Right-click and select ‘view source’. Select all the source and save it to file on your domain like: http://domain.com/403.html
  3. now go to your real forbidden page (or a forbidden situation in some part of your php) example: http://domain.com/members/this_is_forbidden.php
  4. echo this code below before any HTML output or header! (even a whitespace will cause PHP to send HTML/TEXT HTTP Header and it won’t work)
    The code below should be your first line!

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

Now you have the exact solution. I checked and verified with CPANEL Latest Visitors and it is registered as exact 403 event.

answered Oct 6, 2015 at 18:00

Tarik's user avatar

TarikTarik

4,11237 silver badges33 bronze badges

4

.htaccess

ErrorDocument 403     /403.html

answered Feb 21, 2011 at 2:31

6

To minimize the duty of the server make it simple:

.htaccess

ErrorDocument 403 "Forbidden"

PHP

header('HTTP/1.0 403 Forbidden');

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

Shahrokhian's user avatar

answered Feb 5, 2014 at 21:34

virtual_cia's user avatar

Use ModRewrite:

RewriteRule ^403.html$ - [F]

Just make sure you create a blank document called «403.html» in your www root or you’ll get a 404 error instead of 403.

answered Feb 1, 2015 at 22:46

Jay Sudo's user avatar

Jay SudoJay Sudo

991 silver badge2 bronze badges

2

I understand you have a scenario with ErrorDocument already defined within your apache conf or .htaccess and want to make those pages appear when manually sending a 4xx status code via php.

Unfortunately this is not possible with common methods because php sends header directly to user’s browser (not to Apache web server) whereas ErrorDocument is a display handler for http status generated from Apache.

answered Nov 27, 2014 at 15:22

labemi's user avatar

Refresh the page after sending the 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>

answered Oct 12, 2014 at 6:08

Richard's user avatar

1

5

19

Все уже наверно сталкивались с ситуацией, когда при посещении какого-либо сайта выскакивает надпись
Forbidden You don’t have permission to access on this server и нужный сайт не загружается.

Данная ситуация возможна в том случае, если Вы пытаетесь обратиться к ресурсам сайта, доступ к которым запрещен,
либо Ваш IP адрес был забанен на данном сайте. В данном случае код ответа сервера будет равен 403. Проще говоря, сервер возвращает
ошибку 403 (или страничку 403).

В данной теме мы предлагаем Вам создать свою собственную страничку 403 для отслеживания активности заблокированных
IP адресов и IP адресов, пытающихся обратиться к ресурсам, доступ к которым закрыт.

Своя собственная страничка 403 может быть полезна для тех, кто хочет знать, прекратились ли обращения к
страницам сайта с забаненных IP адресов или нет, и кто пытается получить доступ к файлам с ограниченным доступом.

Для начала, давайте посмотрим, как выглядит исходный код странички, которая появляется при попытке доступа к
файлу .htaacces:

HTML код:

<!DOCTYPE html>
<
html lang="en"><head>
<
title>403 Forbidden</title>
</
head><body>
<
h1>Forbidden</h1>
<
p>You don't have permission to access /.htaacces
on this server.</p>
</body></html>

Для создания своей собственной странички 403, создайте файл (например, error403.php). Внутрь данного файла поместите выше
приведенный HTML код с сообщением, после которого добавьте PHP код, который будет писать логи:

PHP код:

<?php
if (filesize("logs_403.txt")<99999) {
 
$fh=fopen("logs_403.txt","a+");
 
flock($fh,LOCK_EX);
 
fseek($fh,0);
 while (!
feof($fh)) $str.=fread($fh,8192);
 
$str.=date("H:i:s d m Y")." | ".htmlspecialchars($_SERVER['REMOTE_ADDR']." | ".
 
$_SERVER['HTTP_USER_AGENT']." | ".$_SERVER['REQUEST_URI']."rn");
 
ftruncate($fh,0);
 
fwrite($fh,$str);
 
flock($fh,LOCK_UN);
 
fclose($fh);
}
?>

Для того чтобы страничка 403 стала универсальной и выдавала в сообщение URL, к которому закрыт доступ,
в HTML коде замените строчку <p>You don’t have permission to access /.htaacces на
<p>You don’t have permission to access /<?php echo strtok(basename($_SERVER[‘REQUEST_URI’]), ‘?’).’ ‘;?>

Теперь Вам остается лишь перенаправить посетителя со стандартной странички 403 на Вашу собственную.
Для этого в файле .htaccess добавьте всего одну строчку:

Цитата:

ErrorDocument 403 /error403.php

Все. Теперь все IP адреса, доступ которым запрещен на сайт и IP адреса, которые пытаются получить доступ к защищенным
ресурсам сайта, будут попадать в файл логов logs_403.txt с указанием времени, User_Agent-а и URL, по которому они пытались получить доступ.

Обращаем Ваше внимание на то, что мы специально добавили в PHP код дополнительное условие проверки
if (filesize(«logs_403.txt»)<99999) для того, чтобы при быстром росте размера файла логов и превышении им
размера в 99999 байт, логи в файл перестали записываться для снижения нагрузки на сервер.

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

Дата создания: 16:12:47 13.06.2013 г.

Посещений: 7728 раз(а).

Перед публикацией все комментарии проходят обязательную модерацию!

Если Вы хотите задать какой-либо вопрос, то сделайте это на нашем форуме.
Таким образом, Вы сможете быстрее получить ответ на интересующий Вас вопрос.

RewriteCond %{REQUEST_URI} ^(https{0,1}://)(www.){0,1}(eksempelhjemmeside.dk|eksempelhjemmeside.de){1}(/not_found){1}$
RewriteRule . - [R=403,NC]

You would seem to be way overcomplicating things here. The REQUEST_URI server variable contains the URL-path only, ie. /not-found. And this is all you appear to be concerned about. You don’t need to check for the domain, www/non-www, HTTP/HTTPS, since you seem to want to match all variations anyway. Unless there are some other subdomains etc. that you don’t want to catch? (But in that case, it might be simpler to match the exceptions, rather than the target?)

However, as @closetnoc suggested in comments, I would still return a simple «404 Not Found» for these requests — since that is what they are. By «simple», I mean the default Apache 404, so you fail early, rather than passing the request through WordPress, which is what is currently happening. So, all you need is something like the following before the WordPress front-controller:

# BLOCK /not_found
RewriteRule ^not_found$ - [R=404]

No need for the <IfModule> wrapper, RewriteEngine directive (since that is already included in the WP block), or RewriteCond directive. When you specify a status code other than 3xx then you don’t need the L (last) flag either (it is implied).

You might want to include the NC (nocase) flag, if you are getting requests for /NoT_FounD and/or /NOT_FOUND etc., but otherwise this should be omitted.

Note that in .htaccess, the URL-path matched with the RewriteRule pattern, does not include the slash prefix. So, the pattern ^not_found$ matches just the URL /not_found.

As an academic excercise, if you did want to return a «403 Forbidden» instead of a 404, then you would change the above directive to read:

RewriteRule ^not_found$ - [F]

Again, no need for the L flag when using the F flag. Alternatively, you can write R=403 instead, but F is the preferred shortcut.

RewriteCond %{REQUEST_URI} ^(https{0,1}://)(www.){0,1}(eksempelhjemmeside.dk|eksempelhjemmeside.de){1}(/not_found){1}$
RewriteRule . - [R=403,NC]

You would seem to be way overcomplicating things here. The REQUEST_URI server variable contains the URL-path only, ie. /not-found. And this is all you appear to be concerned about. You don’t need to check for the domain, www/non-www, HTTP/HTTPS, since you seem to want to match all variations anyway. Unless there are some other subdomains etc. that you don’t want to catch? (But in that case, it might be simpler to match the exceptions, rather than the target?)

However, as @closetnoc suggested in comments, I would still return a simple «404 Not Found» for these requests — since that is what they are. By «simple», I mean the default Apache 404, so you fail early, rather than passing the request through WordPress, which is what is currently happening. So, all you need is something like the following before the WordPress front-controller:

# BLOCK /not_found
RewriteRule ^not_found$ - [R=404]

No need for the <IfModule> wrapper, RewriteEngine directive (since that is already included in the WP block), or RewriteCond directive. When you specify a status code other than 3xx then you don’t need the L (last) flag either (it is implied).

You might want to include the NC (nocase) flag, if you are getting requests for /NoT_FounD and/or /NOT_FOUND etc., but otherwise this should be omitted.

Note that in .htaccess, the URL-path matched with the RewriteRule pattern, does not include the slash prefix. So, the pattern ^not_found$ matches just the URL /not_found.

As an academic excercise, if you did want to return a «403 Forbidden» instead of a 404, then you would change the above directive to read:

RewriteRule ^not_found$ - [F]

Again, no need for the L flag when using the F flag. Alternatively, you can write R=403 instead, but F is the preferred shortcut.

ошибка 403 — как исправить, что за ошибка forbidden. Сегодня разбираемся с ошибкой 403 и да не забыть о «ErrorDocument 403«.

  • С самого начала — просто давайте посмотрим на такую ошибку — которую ранее мы создавали для других страниц, а уже потом прейдем к теории.

    Собственная страница для вывода ошибки 403:

    Вместо стандартной ошибки типа «forbidden» — у нас выводится собственная страница 403.

    Вывод ошибки forbidden 403:

    Такая же ошибка(самодельная) 403, которая выдает «Forbidden You don’t have permission to access /htaccess/folders/cfg.cfg on this server» — , что означает «Запрещено У вас нет разрешения на доступ к /htaccess/folders/cfg.cfg на этом сервере»

    С примерами разобрались! Увидели, вживую созданные ошибки 403.

    Но что же такое ошибка 403 forbidden

    Если вы увидели «ошибка 403 forbidden» — значит, что данный файл, папка, закрыты для просмотра, т.е. запрещены.

    Как исправить ошибку 403.

    Данная ошибка возможно по нескольким причинам.

    Где-то написано правило, которое запрещает вам увидеть информацию.

    Ищем файл htaccess открываем его и ищем, где есть, например :

    Файл htaccess может находиться в любом каталоге начиная с того, где лежит ваша папка/файл — подымаемся по каталогам вплоть до корневой и проверяем все файлы «htaccess».

    Чтобы не встречаться с ошибкой 403.

    Для того, чтобы никогда не встречаться с ошибкой 403 на своем сайте — изучайте теорию и воплощайте её на своем сайте!

  • ErrorDocument 403 htaccess — своя страница 403.html

    Если вместо ответа сервера «forbidden» :

    ErrorDocument 403 htaccess - своя страница 403.html

    Вы хотите вывести свою ошибку 403, то вам нужно в файле htaccess прописать свойство :

    ErrorDocument 403 /403.html

    Смотрим на наш файл htaccess — строка №4.

    ErrorDocument 403 htaccess - своя страница 403.html
    Именно в данном случае!

    Файл htaccess располагается в корневой папке.

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

  • Как собрать собственную страницу 403.html?

    Для того, чтобы сделать у себя на сайте собственную страницу 403.html можно пойти несколькими путями:

    Можно просто скачать ошибку, нажав по кнопке скачать:

    Скачать страницу с ошибкой 403.html

    Либо же вы можете самостоятельно собрать данную ошибку. Скопируйте код и сохраните его на компьютере.

    Потом вам понадобится программа, которая умеет соединяться с сервером filezilla.

    Либо через файл менеджер, который должен быть в админке сайта.

    Далее нужны данные ftp… соединяемся и передаем на сервер.

    Код страницы 403.html

    <!DOCTYPE html>

    <html lang=»en»>

    <head>

    <meta charset=»UTF-8″>

    <title>403</title>

    </head>

    <body>

    <META HTTP-EQUIV=»REFRESH» CONTENT=»3; URL=https://dwweb.ru/»>

    <TITLE>403</TITLE>

    </HEAD><BODY>

    <H1>Доступ запрещен</H1>

    Чё вы здесь делаете!?

    <HR>

    </body>

    </html>

  • Вопрос на засыпку об ошибке 403?

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

    На главном сайте https://dwweb.ru/

    И на поддомене «http://example.dwweb.ru»:

    И выдают, по большому счету, они одно и тоже.

    НО!

    Если мы удалим из ссылки в этих двух случаях название файла и разрешение — т.е. попутаемся открыть папку, где лежат файлы, то получим совершенно разные результата!

    Вопрос почему!?

    Правила htaccess для данной папки идентичные в двух папках.

    На главном сайте https://dwweb.ru/ — получим 404.

    И на поддомене «http://example.dwweb.ru» — откроется папка, где лежит файл:

    12 ответов

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

    Ibrahim AshShohail
    21 фев. 2011, в 03:11

    Поделиться

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

    header('HTTP/1.0 403 Forbidden');
    
    echo 'You are forbidden!';
    

    Изображение 107320

    alex
    21 фев. 2011, в 04:05

    Поделиться

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

    header("HTTP/1.1 403 Forbidden" );
    

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

    exit;
    

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

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

    ErrorDocument 403 /error403.php
    

    Pyrrha
    18 апр. 2013, в 19:17

    Поделиться

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

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

    Marcio Mazzucato
    25 апр. 2017, в 15:50

    Поделиться

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

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

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

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

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

    Jiju Thomas Mathew
    11 дек. 2016, в 05:21

    Поделиться

    .htaccess

    ErrorDocument 403     /403.html
    

    user557846
    21 фев. 2011, в 03:44

    Поделиться

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

    • Земля на вашем сервере реальная 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.

    Tarik
    06 окт. 2015, в 19:03

    Поделиться

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

    RewriteRule ^403.html$ - [F]

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

    Jay Sudo
    02 фев. 2015, в 00:04

    Поделиться

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

    .htaccess

    ErrorDocument 403 "Forbidden"
    

    PHP

    header('HTTP/1.0 403 Forbidden');
    
    die(); // or your message: die('Forbidden');
    

    virtual_cia
    05 фев. 2014, в 23:27

    Поделиться

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

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

    labemi
    27 нояб. 2014, в 15:36

    Поделиться

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

    Richard
    12 окт. 2014, в 07:46

    Поделиться

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

    header('Location: my403page.html');
    

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

    header('HTTP/1.0 403 Forbidden');
    

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

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

    barners
    20 дек. 2013, в 11:30

    Поделиться

    Ещё вопросы

    • 0Как исправить окно с предложениями PHP / HTML
    • 1TimeSeries Стационарность
    • 1Python-массив Numpy в функции с условиями
    • 1Как убедиться, что сообщение socket.io-client получено сервером socket.io? [Дубликат]
    • 0Возобновление XMPP-соединения после обновления страницы
    • 1Android-виджет, не кликабельный
    • 1Лучшая эффективная структура данных для хранения объектов в приложении Android
    • 0Выбор формы HTML и массивы, PHP
    • 0Мостовое соединение MySQL-Oracle
    • 1Разработка Android на Eclipse + Win XP — зависание синтаксиса автозаполнения
    • 0Установите размер шрифта для <div> -box на h2
    • 0Общая архитектура InterlockedIncrement для 32/64-битных
    • 1Правильный способ загрузки данных из базы данных один раз при загрузке страницы в MVC 4 Razor
    • 0Получение функции, запускаемой при нажатии на ссылку
    • 1перемещение поля в новый столбец, если оно содержит значение в определенном столбце
    • 0переменная не определена, но четко определена в моем конструкторе C ++
    • 1Исключение нулевого указателя для массивов
    • 0как исправить положение div
    • 0Как выбрать комментарии с дочерними комментариями из MySQL?
    • 1подсчет количества вхождений в нескольких столбцах панд
    • 1Как получить просмотры страниц на JavaScript?
    • 0Почему этот объект не работает?
    • 1Aurelia диалог повторной проверки
    • 0Ссылка на базовый тип элемента, а не структура или объединение
    • 0Symfony 2 — WSSE — FOSUserBundle — FOSRestBundle — Javascript
    • 1Кэшируйте содержимое онлайн-файла в String, а не в локальный файл
    • 0Получить значения из URL в PHP
    • 0Highcharts — Добавить разницу между y-точками
    • 1Обработка сеанса в асинхронных методах
    • 1Скрипт Google Apps (JavaScript) Разделение регулярных выражений Ссылки на ячейки электронной таблицы
    • 0Лучший способ обработать проверку на стороне клиента с помощью обходного пути
    • 0переменная объема не отражена в директиве
    • 0Получение данных из массива PHP
    • 1Избегайте внутренних добытчиков / сеттеров — Game
    • 0Как показать данные массива на странице, используя angularJs
    • 1Как я могу отформатировать строку из 10 цифр и 2 букв в yyyyMMddHHmm, а затем отформатировать ее в другую строку?
    • 1Преобразование escape-символов Java и смайликов в предложении с помощью Python
    • 1Проблема с вызовом проекта ADF из внешнего приложения
    • 1Использование классов в цикле for в node.js
    • 0Невозможно распаковать результат запроса pymysql в переменные
    • 1Можно ли использовать GoogleFinanceAPI на Android?
    • 0Изменить порядок ассоциативного массива после удаления одного элемента
    • 0Как Сортировать A -> Z при чтении / выборе имен файлов из папки
    • 1Как сохранить пользовательскую карту Google (API)?
    • 1Общий способ перезаписи одного типа поля в типе объекта потока
    • 0Внешние функции «не определены» предупреждение JSHINT
    • 0Как распечатать содержимое очереди
    • 0Как посеять большие наборы данных быстрее в Laravel, используя фейкер
    • 0Конвертировать HTML в XML, используя Java
    • 1Добавьте или объявите две plotOptions в старших диаграммах для Синхронизированной диаграммы

    Katerina1993

    5 / 11 / 3

    Регистрация: 17.01.2017

    Сообщений: 453

    1

    Вызов ошибки для проверки отображения страницы

    10.04.2018, 18:08. Показов 5216. Ответов 4

    Метки нет (Все метки)


    Я создала общую страницу для отображения ошибок и назвала её errors.php. Теперь мне надо принудительно вызвать все коды ошибки: 400, 403, 404, 405, 408, 500, 502, 504, чтобы проверить как отображается страница errors.php. Как это можно сделать, у меня только получилось вызвать 404 ошибку? На всякий случай вот мой .htaccess.

    PHP/HTML
    1
    2
    3
    4
    5
    6
    7
    8
    
    ErrorDocument 400 /errors.php
    ErrorDocument 403 /errors.php
    ErrorDocument 404 /errors.php
    ErrorDocument 405 /errors.php
    ErrorDocument 408 /errors.php
    ErrorDocument 500 /errors.php
    ErrorDocument 502 /errors.php
    ErrorDocument 504 /errors.php

    и php документ errors.php

    PHP
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    $status = $_SERVER['REDIRECT_STATUS'];
    $codes = array(
           400 => array('400 Плохой запрос', 'Запрос не может быть обработан из-за синтаксической ошибки.'),
           403 => array('403 Запрещено', 'Сервер отказывает в выполнении вашего запроса.'),
           404 => array('404 Не найдено', 'Запрашиваемая страница не найдена на сервере.'),
           405 => array('405 Метод не допускается', 'Указанный в запросе метод не допускается для заданного ресурса.'),
           408 => array('408 Время ожидания истекло', 'Ваш браузер не отправил информацию на сервер за отведенное время.'),
           500 => array('500 Внутренняя ошибка сервера', 'Запрос не может быть обработан из-за внутренней ошибки сервера.'),
           502 => array('502 Плохой шлюз', 'Сервер получил неправильный ответ при попытке передачи запроса.'),
           504 => array('504 Истекло время ожидания шлюза', 'Вышестоящий сервер не ответил за установленное время.'),
    );
     
    $title = $codes[$status][0];
    $message = $codes[$status][1];
    if ($title == false || strlen($status) != 3) {
           $message = 'Код ошибки HTTP не правильный.';
    }
     
    echo '<h1>Внимание! Обнаружена ошибка '.$title.'!</h1>
    <p>'.$message.'</p>';

    __________________
    Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

    0

    5 / 11 / 3

    Регистрация: 17.01.2017

    Сообщений: 453

    11.04.2018, 11:09

     [ТС]

    3

    Не успела я протестировать ваш пример, как на сайте мне выдало 502 Bad Gateway. Автоматически моя страница не подставляется. Я эту страницу специально сделала, чтобы при попадании на неё записывался код ошибки в базу данных таким образом я буду знать сколько пользователь в день получает 502 ошибку. Как сделать так, чтобы не только клиентская ошибка 4xx, но и серверная ошибка 5xx выдавало мою страницу?

    0

    322 / 268 / 69

    Регистрация: 15.09.2017

    Сообщений: 1,233

    11.04.2018, 12:07

    4

    Код

    ErrorDocument 502 /errors.php?status=502

    0

    Эксперт PHP

    4833 / 3848 / 1596

    Регистрация: 24.04.2014

    Сообщений: 11,292

    11.04.2018, 12:55

    5

    Katerina1993, 5xx это ошибка на стороне сервера, в том числе из-за отвалившегося php. И если php лежит, то с помощью него в базу записать ничего не выйдет. Помимо этого директива ErrorDocument не будет работать, если запрос будет передан php. И кодов ошибок несколько больше, чем перечислено в скрипте.

    0

    1. Главная
    2. Форумы
    3. Техподдержка Drupal
    4. Решение проблем

    Главные вкладки

    • Просмотр(активная вкладка)
    • Реакции

    Аватар пользователя xakd
    xakd


    21 мая 2016 в 13:21

    Нужно при некоторых условиях в функции модуля выдать страницу 403. Но что-то рецепты 6-ки совсем не работают.
    Пробовал<?php drupal_access_denied();?> — зависает, входит в цикл, <?php return drupal_access_denied(); ?>аналогично, <?php drupal_deliver_html_page(MENU_NOT_FOUND);?> — тоже самое.
    В 6-ке все норм работало, как в семерке это корректно сделать при произвольных ситуациях в коде?

    • Drupal7
    • Есть вопрос
    • Решение проблем
    • Блог
    • Войдите или зарегистрируйтесь, чтобы отправлять комментарии

    Комментарии

    Аватар пользователя goodboy
    goodboy


    21 мая 2016 в 14:28

    А вот так
    drupal_add_http_header('Status', '403 Forbidden');

    Аватар пользователя xakd
    xakd


    21 мая 2016 в 14:52

    Нет, это инструкция просто зацикливает — как и остальные. Сотни сообщений в журнале, что ошибка 403.
    При условии конечно что у нас 403 не определена — хотя в других ситуациях все работает, при попытке влезть в админку к примеру

    Аватар пользователя Lotar
    Lotar


    21 мая 2016 в 14:50

    Аватар пользователя negociant
    negociant


    21 мая 2016 в 15:22

    и указали бы где конкретно пытаетесь вызывать drupal_access_denied().

    Аватар пользователя xakd
    xakd


    21 мая 2016 в 15:40

    Уберите из настроек адрес 403 — и попробуйте, циклится в итоге. Где не пробуй — пробовал в THEME_preprocess_page, пробовал в MODULE_init — бесполезно, пока не допетрил, что адрес можно попробовать ввести в настройки для 403.

    Katerina1993

    5 / 11 / 3

    Регистрация: 17.01.2017

    Сообщений: 458

    1

    Вызов ошибки для проверки отображения страницы

    10.04.2018, 18:08. Показов 5582. Ответов 4

    Метки нет (Все метки)


    Студворк — интернет-сервис помощи студентам

    Я создала общую страницу для отображения ошибок и назвала её errors.php. Теперь мне надо принудительно вызвать все коды ошибки: 400, 403, 404, 405, 408, 500, 502, 504, чтобы проверить как отображается страница errors.php. Как это можно сделать, у меня только получилось вызвать 404 ошибку? На всякий случай вот мой .htaccess.

    PHP/HTML
    1
    2
    3
    4
    5
    6
    7
    8
    
    ErrorDocument 400 /errors.php
    ErrorDocument 403 /errors.php
    ErrorDocument 404 /errors.php
    ErrorDocument 405 /errors.php
    ErrorDocument 408 /errors.php
    ErrorDocument 500 /errors.php
    ErrorDocument 502 /errors.php
    ErrorDocument 504 /errors.php

    и php документ errors.php

    PHP
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    $status = $_SERVER['REDIRECT_STATUS'];
    $codes = array(
           400 => array('400 Плохой запрос', 'Запрос не может быть обработан из-за синтаксической ошибки.'),
           403 => array('403 Запрещено', 'Сервер отказывает в выполнении вашего запроса.'),
           404 => array('404 Не найдено', 'Запрашиваемая страница не найдена на сервере.'),
           405 => array('405 Метод не допускается', 'Указанный в запросе метод не допускается для заданного ресурса.'),
           408 => array('408 Время ожидания истекло', 'Ваш браузер не отправил информацию на сервер за отведенное время.'),
           500 => array('500 Внутренняя ошибка сервера', 'Запрос не может быть обработан из-за внутренней ошибки сервера.'),
           502 => array('502 Плохой шлюз', 'Сервер получил неправильный ответ при попытке передачи запроса.'),
           504 => array('504 Истекло время ожидания шлюза', 'Вышестоящий сервер не ответил за установленное время.'),
    );
     
    $title = $codes[$status][0];
    $message = $codes[$status][1];
    if ($title == false || strlen($status) != 3) {
           $message = 'Код ошибки HTTP не правильный.';
    }
     
    echo '<h1>Внимание! Обнаружена ошибка '.$title.'!</h1>
    <p>'.$message.'</p>';



    0



    5 / 11 / 3

    Регистрация: 17.01.2017

    Сообщений: 458

    11.04.2018, 11:09

     [ТС]

    3

    Не успела я протестировать ваш пример, как на сайте мне выдало 502 Bad Gateway. Автоматически моя страница не подставляется. Я эту страницу специально сделала, чтобы при попадании на неё записывался код ошибки в базу данных таким образом я буду знать сколько пользователь в день получает 502 ошибку. Как сделать так, чтобы не только клиентская ошибка 4xx, но и серверная ошибка 5xx выдавало мою страницу?



    0



    325 / 271 / 69

    Регистрация: 15.09.2017

    Сообщений: 1,240

    11.04.2018, 12:07

    4

    Код

    ErrorDocument 502 /errors.php?status=502



    0



    Эксперт PHP

    4845 / 3857 / 1599

    Регистрация: 24.04.2014

    Сообщений: 11,317

    11.04.2018, 12:55

    5

    Katerina1993, 5xx это ошибка на стороне сервера, в том числе из-за отвалившегося php. И если php лежит, то с помощью него в базу записать ничего не выйдет. Помимо этого директива ErrorDocument не будет работать, если запрос будет передан php. И кодов ошибок несколько больше, чем перечислено в скрипте.



    0



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