Ограничить прямой доступ к страницам ошибок - PullRequest
5 голосов
/ 12 декабря 2011

Я использую .htaccess, чтобы показать пользовательскую страницу HTML для ошибок (401, 404, 500 и т. Д.). Я хочу ограничить прямой доступ к папке ошибок, которая содержит HTML-страницы. Внутри файла .htaccess папки ошибок у меня есть следующее:

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain\.com
RewriteRule \.(html|htm)$ - [F] 

Это не похоже на работу, и я получаю:

a 500 Internal Server Error error was encountered while trying to use an 
ErrorDocument to handle the request.

Какие изменения я должен внести в файл .htaccess, чтобы заставить это работать. Мне также интересно, сработает ли это, если я вставлю папку ошибок вне папки public_html?

Ответы [ 2 ]

5 голосов
/ 12 декабря 2011

Вот что вы должны положить в свой .htaccess (в ваш public_html)

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^(www\.)?mydomain\.com
RewriteRule \.(html|htm)$ - [F]

Дайте мне знать, если он работает

0 голосов
/ 13 декабря 2011

В вашем файле .htaccess перенаправьте все ошибки в один php-файл

ErrorDocument 403 /errors.php
ErrorDocument 404 /errors.php
ErrorDocument 500 /errors.php

в errors.php используйте $ _SERVER ['REDIRECT_STATUS'] с оператором if else для обнаружения ошибок и отображения пользовательских сообщений

if($_SERVER['REDIRECT_STATUS'] == 403)
{
    die("Forbidden");
}
else if($_SERVER['REDIRECT_STATUS'] == 404)
{
    die("NOT FOUND");
}
else if($_SERVER['REDIRECT_STATUS'] == 500)
{
    die("Server Error");
}
else if($_SERVER['REDIRECT_STATUS'] == 200)
{
 // user is trying to directly access the errors page, redirect to index.php
 header("Location: index.php");
}
else
{
    // all other error codes
}

Вот Список кодов состояния HTTP .Напишите оператор else if для каждой ошибки, которую вы хотите обнаружить.Необнаруженные ошибки попадут в блок else

...