Как создать собственные страницы ошибок 401, 403 и 500?

1 мая 2014 г., 14:44:47
Просмотры: 38.6K
Голосов: 30

Когда возникает ошибка 404, для отображения пользовательского сообщения об ошибке можно использовать файл шаблона 404.php. Это документировано в статье Иерархия шаблонов.

Моя цель - создать пользовательские страницы ошибок для 401, 403 и 500. Я пробовал создавать файлы 401.php, 403.php и 500.php в директории моей темы, но это не работает.

Как создать пользовательские страницы ошибок 401, 403 и 500 в WordPress?

2
Комментарии

Вы можете использовать этот код в качестве отправной точки: http://jesin.tk/wordpress-custom-403-401-error-page/

Joe Joe
1 мая 2014 г. 14:48:21

Вот существующий плагин, который позволяет настраивать страницы ошибок, такие как 403 и 401: http://wordpress.org/plugins/custom-error-pages/ Всё, что вам нужно сделать — это установить и активировать его. Однако вам придётся вручную отредактировать файл .htaccess (или nginx.conf), указанный на странице настроек плагина.

Pi Lover Pi Lover
1 мая 2014 г. 16:56:14
Все ответы на вопрос 1
5
17

Страницы ошибок настраиваются через файл .HTACCESS. Если вы используете Apache, вам нужно использовать директиву ErrorDocument и добавить в неё статус и URL.

Вот как это будет выглядеть в вашем .htaccess файле:

ErrorDocument 401 http://yourwebsite.com/error-401
ErrorDocument 403 http://yourwebsite.com/error-403
ErrorDocument 500 http://yourwebsite.com/error-500

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

1. Создание страниц:

Далее вам нужно перейти в админ-панель WordPress и создать страницы, как обычные ('Консоль' > 'Страницы' > 'Добавить новую'). Названия могут быть любыми, но важно, чтобы их ярлыки (slug) совпадали с указанными в функции ниже (например: error-401, error-403, error-404, error-500). Также вы можете использовать шаблоны страниц, чтобы создать уникальный дизайн для этих страниц. Для этого следуйте инструкциям в WordPress Codex.

2. Добавление функции:

// Создание пользовательских страниц ошибок в WordPress с использованием HTACCESS
function royal_custom_error_pages() {

    // Получаем путь к HTACCESS и динамический URL сайта
    $htaccess_file = '.htaccess';
    $website_url = get_bloginfo('url').'/';

    // Проверяем и предотвращаем повторную запись страниц ошибок
    $check_file = file_get_contents($htaccess_file);
    $this_string = '# BEGIN WordPress Error Pages';

    if( strpos( $check_file, $this_string ) === false) {

    // Формируем динамические пути для страниц ошибок
    $error_pages .= PHP_EOL. PHP_EOL . '# BEGIN WordPress Error Pages'. PHP_EOL. PHP_EOL;
    $error_pages .= 'ErrorDocument 401 '.$website_url.'error-401'.PHP_EOL;
    $error_pages .= 'ErrorDocument 403 '.$website_url.'error-403'.PHP_EOL;
    $error_pages .= 'ErrorDocument 404 '.$website_url.'error-404'.PHP_EOL;
    $error_pages .= 'ErrorDocument 500 '.$website_url.'error-500'.PHP_EOL;
    $error_pages .= PHP_EOL. '# END WordPress Error Pages'. PHP_EOL;

    // Записываем пути страниц ошибок в HTACCESS
    $htaccess = fopen( $htaccess_file, 'a+');
    fwrite( $htaccess, $error_pages );
    fclose($htaccess);

    }
}

add_action('init','royal_custom_error_pages'); // Функция будет запускаться при каждой загрузке, что не оптимально!

// register_activation_hook( __FILE__, 'royal_custom_error_pages' ); // Используется в плагинах, запускается только один раз!

Важно! Примечания к функции:

При переносе сайта или изменении структуры URL:

Хотя функция проверяет наличие директив ErrorDocument перед их записью, она не обновит их, если вы измените или перенесёте сайт. В таком случае вам нужно вручную удалить существующие директивы из HTACCESS и повторно запустить функцию для создания новых.

Правильный хук для однократного срабатывания функции:

Обратите внимание, что при использовании хука init функция будет запускаться при каждой загрузке страницы, что неэффективно. Лучше добавить её в плагин и использовать register_activation_hook, чтобы она срабатывала только при активации плагина.

Права доступа к файлу:

Для работы функции файл .htaccess должен быть доступен для записи. Убедитесь, что установлены правильные права, например CHMOD 777.

20 июн. 2014 г. 21:12:03
Комментарии

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

Solomon Closson Solomon Closson
26 апр. 2016 г. 06:34:18

@SolomonClosson, возможно, вы можете попробовать использовать плагин, который я написал для этого. Он сделает все за вас и точно следует приведенному выше коду :). Официальный плагин WordPress.Org

Matt Royal Matt Royal
26 апр. 2016 г. 11:04:19

@MattRoyal Функция работает отлично, и я использую ее для создания других правил htaccess. Как я могу сделать так, чтобы правила вставлялись в самое начало файла, выше стандартных правил wp htaccess? В данный момент правила добавляются в конец файла htaccess. Спасибо.

lowtechsun lowtechsun
12 февр. 2018 г. 17:27:20

Я не согласен с предложенным решением: 1- НЕЛЬЗЯ устанавливать права 777 на веб-сервере! Это плохая практика в целом и создаёт серьёзные уязвимости безопасности. 2- Вы добавляете операцию записи файла при каждом запросе к сайту. Поскольку это операция записи, она будет блокировать файл, позволяя только одну запись за раз, что уменьшит количество одновременных запросов, которые вы можете обрабатывать. 3- Веб-сайт не должен зависеть от сервера, на котором он работает. Если сайт перенесут на систему с nginx, например, он перестанет работать как ожидалось. ...продолжение

Eduardo Oliveira Eduardo Oliveira
10 сент. 2019 г. 12:41:48

4- Существуют более правильные способы сбора ошибок https://stackoverflow.com/a/34619308/768516

Eduardo Oliveira Eduardo Oliveira
10 сент. 2019 г. 12:45:32