Як створити користувацькі сторінки помилок 401, 403 та 500?


27

Якщо виникає помилка 404, файл шаблону 404.php може бути використаний для надання користувальницького повідомлення про помилку. Це задокументовано у статті про Ієрархію шаблонів .

Моя мета - створити власні сторінки помилок для 401, 403 та 500 помилок. Я спробував створити файли 401.php, 403.php та 500.php у каталозі моєї теми, але це не працює.

Як я можу створити користувацькі сторінки помилок 401, 403 та 500 у WordPress?


2
Ви можете спробувати використати цей код як початковий пункт: jesin.tk/wordpress-custom-403-401-error-page
Joe

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

Відповіді:


15

Сторінки помилок подаються через .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. Додати сторінки:

Потім вам потрібно буде зайти на інформаційну панель і створити Сторінки, як і будь-яка звичайна сторінка ("Інформаційна панель"> "Сторінки"> "Нова"). Їх можна назвати тим, що вам завгодно, просто переконайтеся, що слизь той самий, як у функції нижче (Slug: помилка-401, помилка-403, помилка-404, помилка-500). Також ви можете використовувати шаблон сторінки для створення будь-якого макета та стилю для цих конкретних сторінок. Дотримуйтесь інструкцій WordPress Codex для цього.

2. Додати функцію:

// Create Custom Error Pages in WordPress using HTACCESS
function royal_custom_error_pages() {

    // Get HTACCESS path & dynamic website url
    $htaccess_file = '.htaccess';
    $website_url = get_bloginfo('url').'/';

    // Check & prevent writing error pages more than once
    $check_file = file_get_contents($htaccess_file);
    $this_string = '# BEGIN WordPress Error Pages';

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

    // Setup Error page locations dynamically
    $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;

    // Write the error page locations to HTACCESS
    $htaccess = fopen( $htaccess_file, 'a+');
    fwrite( $htaccess, $error_pages );
    fclose($htaccess);

    }
}

add_action('init','royal_custom_error_pages'); // This will run the function everytime, not ideal!

// register_activation_hook( __FILE__, 'royal_custom_error_pages' ); // Using a plugin, runs only once!

NB !! ПРИМІТКИ ПРО ПРОБЛЕМУ ФУНКЦІЮ

Під час переміщення веб-сайту або зміни структури URL-адреси

Слід пам’ятати про вищевказану функцію, хоча вона перевірить, чи існують директиви ErrorDocument, перш ніж записати їх у свій файл HTACCESS, вона не перезаписає директиви ErrorDocument, якщо ви зміните або пересунете свій блог, щоб відобразити оновлені місця на сторінці. Вам потрібно спочатку видалити існуючі директиви ErrorDocument у вашому файлі HTACCESS, а потім повторно запустити цю функцію для створення нових директив.

Виконайте правильний гачок, щоб запустити функцію ТІЛЬКИ ОДИН

Інша річ, яку слід відзначити, це ця функція, використання initдії буде запускатися кожного разу, коли ваші сторінки завантажуються, що є надто непотрібним та марним, тому я б запропонував додати її до плагіна та register_activation_hookскоріше використовувати , щоб він активувався лише один раз при активації плагіна

Дозволи файлів

Крім того, обов'язково потрібно, щоб ваш .htaccess був доступним для запису при використанні вищевказаної функції, тому переконайтеся, що він має правильні дозволи на файли, щось на зразок CHMOD777.


Не впевнений, як це, мабуть, працює, чи вручну редагував файл .htaccess, але це не працює. Я намагаюся зробити це у localhost, і це повинно бути можливим у localhost, оскільки я маю доступ до всього, сервера та клієнта. Але чому це не працює?
Соломон Клоссон

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

@MattRoyal Функція чудово працює, і я використовую її для створення інших правил htaccess. Як я можу зробити так, щоб правила були вставлені у верхній частині файлу, над правилами wta htaccess за замовчуванням, будь ласка? На даний момент правила додаються внизу файлу htaccess. Дякую.
lowtechsun

Я не погоджуюся з рішенням: 1– ВИ НЕ БУДЕ НЕ БУТИ 777 на веб-сервері! Це взагалі погана практика і призводить до великих пробілів у безпеці. 2- Ви додаєте запис файлу за кожним запитом на веб-сайт, в результаті дії з записом це створить блокування у файлі, що дозволить одночасно написати лише один раз, коли ви зменшите кількість запитів, які ви відповідатиме одночасно. 3- Веб-сайт не повинен мати залежності від сервера, на якому він працює, якщо він переміститься до системи, де використовується nginx, наприклад, він перестане працювати, як очікувалося. ... продовжується
Едуардо Олівейра

4 Є чисті способи Грабінг помилки stackoverflow.com/a/34619308/768516
Едуардо Олівейра
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.