¿Cómo crear páginas de error 401, 403 y 500 personalizadas?

27

Cuando se encuentra un error 404, se puede usar un archivo de plantilla 404.php para representar un mensaje de error personalizado. Esto está documentado en el artículo Jerarquía de plantillas .

Mi objetivo es crear páginas de error personalizadas para errores 401, 403 y 500. Intenté crear archivos 401.php, 403.php y 500.php en el directorio de mi tema, pero esto no funciona.

¿Cómo puedo crear páginas de error 401, 403 y 500 personalizadas en WordPress?

henrywright
fuente
2
Puede intentar usar este código como punto de partida: jesin.tk/wordpress-custom-403-401-error-page
Joe
Aquí hay un complemento existente que le permite personalizar páginas de error como 403 y 401: http://wordpress.org/plugins/custom-error-pages/ Todo lo que tiene que hacer es instalar y activar. Sin embargo, debe editar manualmente el archivo .htaccess (o nginx.conf) especificado en la página de opciones de complementos.
Pi Lover

Respuestas:

15

Las páginas de error se sirven a través de .HTACCESS, si está usando Apache, usaría la ErrorDocumentdirectiva y agregaría el estado y la URL.

Así se vería así en su archivo .htaccess:

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

Puede usar la siguiente función a continuación. Esto agregará dinámicamente lo que se necesita al archivo HTACCESS para usted o podría hacerlo manualmente.

1. Añadir páginas:

Luego, deberá ingresar a su Tablero y crear las Páginas como cualquier página normal ('Tablero'> 'Páginas'> 'Nuevo'). Pueden titularse como quieras, solo asegúrate de que el slug sea el mismo que en la función a continuación (Slug: error-401, error-403, error-404, error-500). También puede usar la plantilla de página para crear cualquier diseño y estilo que desee para estas páginas específicas. Siga las instrucciones del Codex de WordPress para esto.

2. Agregar función:

// 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!

¡¡NÓTESE BIEN!! NOTAS SOBRE LA FUNCIÓN ANTERIOR

Al mover su sitio web o cambiar la estructura de URL

Lo que debe recordar con la función anterior es que, aunque verificará si las directivas ErrorDocument ya existen antes de escribirlas en su archivo HTACCESS, no reescribirá las directivas ErrorDocument si cambia o mueve su blog para reflejar las ubicaciones actualizadas de las páginas. Debería eliminar primero las directivas ErrorDocument existentes en su archivo HTACCESS y luego volver a ejecutar esta función para crear las nuevas directivas.

Gancho correcto para activar la función SOLO UNA VEZ

La otra cosa a tener en cuenta es esta función, el uso de la initacción se ejecutará cada vez que se carguen sus páginas, lo que es super innecesario y derrochador, por lo que sugeriría agregarlo a un complemento y usarlo register_activation_hookpara que solo se active una vez en la activación del complemento

Permisos de archivo

También es imperativo que su .htaccess sea editable cuando use la función anterior, así que asegúrese de que tenga los permisos de archivo correctos, algo así como CHMOD777.

Matt Royal
fuente
No estoy seguro de cómo se supone que funciona, las modificaciones se realizaron manualmente en el archivo .htaccess, pero esto no funciona. Estoy tratando de hacer esto en localhost y esto debería ser posible en localhost, ya que tengo acceso a todo, el servidor y el cliente. ¿Pero por qué esto no funciona?
Solomon Closson
@SolomonClosson, tal vez pueda intentar usar el complemento que escribí para esto, hará todo por usted y sigue exactamente el código anterior :). Plugin oficial de WordPress.Org
Matt Royal
@MattRoyal La función funciona muy bien y la estoy usando para crear otras reglas de acceso. ¿Cómo puedo hacer que las reglas se inserten en la parte superior del archivo, por encima de las reglas predeterminadas de wp htaccess, por favor? Por el momento, las reglas se agregan en la parte inferior del archivo htaccess. Gracias.
lowtechsun
No estoy de acuerdo con la solución: 1- ¡NO DEBERÍAS 777 nada en un servidor web! Eso es solo una mala práctica en general y conduce a importantes agujeros de seguridad. 2- Está agregando una escritura de archivo en cada solicitud al sitio web, siendo una acción de escritura creará un bloqueo en el archivo permitiendo solo una escritura al tiempo que reducirá la cantidad de solicitudes y responderá simultáneamente. 3- Un sitio web no debe tener dependencias del servidor donde se ejecuta, si se migra a un sistema donde se usa nginx, por ejemplo, dejará de funcionar como se esperaba. ... continúa
Eduardo Oliveira
4- Hay formas más limpias de errores de grabing stackoverflow.com/a/34619308/768516
Eduardo Oliveira