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

1 may 2014, 14:44:47
Vistas: 38.6K
Votos: 30

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

Mi objetivo es crear páginas de error personalizadas para los errores 401, 403 y 500. He intentado 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 personalizadas 401, 403 y 500 en WordPress?

2
Comentarios

Podrías intentar usar este código como punto de partida: http://jesin.tk/wordpress-custom-403-401-error-page/

Joe Joe
1 may 2014 14:48:21

Aquí tienes un plugin existente que te permite personalizar páginas de error como los errores 403 y 401: http://wordpress.org/plugins/custom-error-pages/ Solo tienes que instalarlo y activarlo. Sin embargo, debes editar manualmente el archivo .htaccess (o nginx.conf) especificado en la página de opciones del plugin.

Pi Lover Pi Lover
1 may 2014 16:56:14
Todas las respuestas a la pregunta 1
5
17

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

Así se vería en tu archivo .htaccess:

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

Podrías usar la siguiente función. Esto agregará dinámicamente lo necesario al archivo HTACCESS por ti o podrías hacerlo manualmente.

1. Agregar páginas:

Luego necesitarías ir a tu Panel de control y crear las Páginas como cualquier página normal ('Panel' > 'Páginas' > 'Añadir nueva'). Puedes titularlas como desees, solo asegúrate que el slug sea el mismo que en la función abajo (Slug: error-401, error-403, error-404, error-500). También puedes usar plantillas de página para crear cualquier diseño y estilo que desees para estas páginas específicas. Sigue las instrucciones del WordPress Codex para esto.

2. Agregar función:

// Crear páginas de error personalizadas en WordPress usando HTACCESS
function royal_custom_error_pages() {

    // Obtener ruta de HTACCESS y URL dinámica del sitio
    $htaccess_file = '.htaccess';
    $website_url = get_bloginfo('url').'/';

    // Verificar y prevenir escribir páginas de error más de una vez
    $check_file = file_get_contents($htaccess_file);
    $this_string = '# BEGIN WordPress Error Pages';

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

    // Configurar ubicaciones de páginas de error dinámicamente
    $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;

    // Escribir las ubicaciones de páginas de error en HTACCESS
    $htaccess = fopen( $htaccess_file, 'a+');
    fwrite( $htaccess, $error_pages );
    fclose($htaccess);

    }
}

add_action('init','royal_custom_error_pages'); // Esto ejecutará la función cada vez, ¡no es ideal!

// register_activation_hook( __FILE__, 'royal_custom_error_pages' ); // Usando un plugin, ¡se ejecuta solo una vez!

¡¡NOTA!! NOTAS SOBRE LA FUNCIÓN ANTERIOR

Al mover tu sitio web o cambiar la estructura de URL

Lo que hay que recordar con la función anterior es que, aunque verificará si las directivas ErrorDocument ya existen antes de escribirlas en tu archivo HTACCESS, no reescribirá las directivas ErrorDocument si cambias o mueves tu blog para reflejar las nuevas ubicaciones de las páginas. Necesitarías borrar las directivas ErrorDocument existentes en tu archivo HTACCESS primero y luego volver a ejecutar esta función para crear las nuevas directivas.

El hook correcto para ejecutar la función SOLO UNA VEZ

Otra cosa a notar es que esta función, usando la acción init, se ejecutará cada vez que se carguen tus páginas, lo cual es totalmente innecesario y derrochador, así que sugeriría agregarla a un plugin y usar register_activation_hook en su lugar para que solo se ejecute una vez al activar el plugin.

Permisos de archivo

También es imperativo que tu .htaccess sea escribible cuando uses la función anterior, así que asegúrate que tenga los permisos de archivo correctos, algo como CHMOD777.

20 jun 2014 21:12:03
Comentarios

No estoy seguro de cómo se supone que esto debe funcionar, hice las ediciones manualmente en el archivo .htaccess, pero no funciona. Estoy intentando hacer esto en localhost y debería ser posible en localhost, ya que tengo acceso a todo, el servidor y el cliente. Pero ¿por qué no está funcionando?

Solomon Closson Solomon Closson
26 abr 2016 06:34:18

@SolomonClosson, tal vez puedas probar usando el plugin que escribí para esto, hará todo por ti y sigue exactamente el código anterior :). Plugin Oficial de WordPress.Org

Matt Royal Matt Royal
26 abr 2016 11:04:19

@MattRoyal La función funciona genial y la estoy usando para crear otras reglas de htaccess. ¿Cómo puedo hacer que las reglas se inserten al principio del archivo, por encima de las reglas predeterminadas de wp htaccess? En este momento las reglas se agregan al final del archivo htaccess. Gracias.

lowtechsun lowtechsun
12 feb 2018 17:27:20

No estoy de acuerdo con la solución: 1- ¡NO DEBES configurar nada en 777 en un servidor web! Eso es simplemente una mala práctica en general y genera grandes agujeros de seguridad. 2- Estás agregando una escritura de archivo en cada solicitud al sitio web, al ser una acción de escritura creará un bloqueo en el archivo permitiendo solo una escritura a la vez, lo que reducirá la cantidad de solicitudes que puedes responder simultáneamente. 3- Un sitio web no debería tener dependencias del servidor donde se ejecuta, si se migra a un sistema donde se usa nginx, por ejemplo, dejará de funcionar como se espera. ...continúa

Eduardo Oliveira Eduardo Oliveira
10 sept 2019 12:41:48

4- Hay formas más limpias de capturar errores https://stackoverflow.com/a/34619308/768516

Eduardo Oliveira Eduardo Oliveira
10 sept 2019 12:45:32