15.06.2017 10:39:12 am
На одном из своих сайт я делал себе страницы ошибок 400, 403, 404, 500. Хочу рассказать, как я это сделал. У меня языковые переменные ошибок находятся в отдельном файле:
Файл, который отвечает за вывод страниц ошибок:
Переменная
Ну конечно вставил в .htaccess следующие строки:
Я прописываю абсолютный адрес страницы ошибок, так как используя не полный адрес страницы:
перейдя на несуществующею страницу (пример): http://site/dir1/dir2/dir3/file.php, могут не подгрузиться стили сайта, JS и картинки, в итоги страница будет выглядеть криво, а все ссылки на этой страницы будут иметь адрес такого вида (например на главную): http://site/dir1/dir2/dir3/index.php, что совершенно не правильно.
Ну, вот пока все. Надеюсь информация была Вам полезной.
Спасибо за внимание.
<?php
/*
RU - Русский язык
Файл error.php
*/
if (empty($lang) or !is_array($lang)) # Проверка на существование переменной $lang и является ли она массивом
{
$lang = array(); # Если переменная не существует или это не массив, то создается массив
}
$lang = array_merge($lang, array( # Соединяет массив с уже созданным массивом
'error_400' => 'Ошибка 400 (Bad Request)',
'error_403' => 'Ошибка 403',
'error_404' => 'Ошибка 404 (Page Not Found)',
'error_500' => 'Ошибка 500 (Internal Server Error)',
'error_400_info' => '<div class="error">Ошибка 400. Неверный запрос (Bad Request).</div>',
'error_403_info' => '<div class="error">Ошибка 403. Нет прав на просмотр контента или на просмотр страницы.</div>',
'error_404_info' => '<div class="error">Ошибка 404. Страница не найдена (Page Not Found).</div>',
'error_500_info' => '<div class="error">Ошибка 500. Внутренняя ошибка сервера (Internal Server Error).</div>'
));
Файл, который отвечает за вывод страниц ошибок:
<?php
/*
Страницы ошибок
Файл error.php
*/
include('lang/ru/error.php'); # Подключение языкового файла
if (isset($_GET['mode']))
{
# Ошибка 400
if ($_GET['mode'] == '400')
{
$title = $lang['error_400'] . ' • ' . $lang['site_name'];
$info = $lang['error_400_info'];
}
# Ошибка 403
if ($_GET['mode'] == '403')
{
$title = $lang['error_403'] . ' • ' . $lang['site_name'];
$info = $lang['error_403_info'];
}
# Ошибка 404
if ($_GET['mode'] == '404')
{
$title = $lang['error_404'] . ' • ' . $lang['site_name'];
$info = $lang['error_404_info'];
}
# Ошибка 500
if ($_GET['mode'] == '500')
{
$title = $lang['error_500'] . ' • ' . $lang['site_name'];
$info = $lang['error_500_info'];
}
template('info'); # Подключение шаблона
}
else
{
$location = (isset($_SERVER['HTTP_REFERER'])) ? (basename($_SERVER['HTTP_REFERER'])) : 'index' . PHP;
header('Location: ' . $location, true, 301);
exit;
}
Переменная
$lang['site_name']
находится у меня в другом языковом файле (тоже массив $lang
), содержит она в себе название сайта.Ну конечно вставил в .htaccess следующие строки:
<IfModule mod_rewrite.c>
RewriteEngine On
# Error Page
ErrorDocument 400 http://site/error.php?mode=400
ErrorDocument 403 http://site/error.php?mode=403
ErrorDocument 404 http://site/error.php?mode=404
ErrorDocument 500 http://site/error.php?mode=500
</IfModule>
Я прописываю абсолютный адрес страницы ошибок, так как используя не полный адрес страницы:
ErrorDocument 404 /error.php?mode=404
перейдя на несуществующею страницу (пример): http://site/dir1/dir2/dir3/file.php, могут не подгрузиться стили сайта, JS и картинки, в итоги страница будет выглядеть криво, а все ссылки на этой страницы будут иметь адрес такого вида (например на главную): http://site/dir1/dir2/dir3/index.php, что совершенно не правильно.
Ну, вот пока все. Надеюсь информация была Вам полезной.
Спасибо за внимание.
- Жалоба