Página 1 de 1

¿Cómo crear páginas personalizadas para cuando se produce un error en la web?

Publicado: 14 Abr 2020, 14:55
por karbiko

Hola, como algunos ya sabéis, en los últimos días he actualizado a 3.3.0 y ahí tuve unos errores, que hacían que aparecía una página personalizada de IONOS en lugar de la habitual de mi foro indicando que no se podía acceder. Con vuestra ayuda pude resolverlo (aquí el tema en concreto)... aunque todavía me queda algún error por terminar de encontrar..

Mi hosting me indicó que era debido a que no tenía personalizadas páginas para mostrar en caso de que hubiera un error en la carga de la página.
He estado buscando información al respecto y he encontrado algunas web que informan más o menos de manera sencilla de entender los tipos de errores que pueden existir (tanto aquí como en esta otra)

En el foro, he encontrado este tema en el archivo del antiguo 3.0:
Crear páginas personalizadas de error 403 y 404

Quería preguntar si ese método que explican sigue siendo válido para 3.3.0, y si se podría hacer igualmente para el resto de errores habituales, sobre todo los 50x...

Gracias anticipadas!
.. Y salud para tod@s!

PD: no pretendo hacer spam con esos dos enlaces que pongo, sino que me parecen interesantes para que quien no tenga conocimiento del tipo de errores que se pueden dar, pueda encontrar una posible referencia donde solventarle esas dudas.


¿Cómo crear páginas personalizadas para cuando se produce un error en la web?

Publicado: 14 Abr 2020, 19:58
por AlfredoRamos

Esa guía para páginas personalizadas de 403 y 404 me parece que aún son relevantes y muy probablemente aún funcionarían con phpBB 3.3.x, porque usan funciones aún en uso dentro del propio código de phpBB sin embargo yo usaría algo como:

403.php

Código: Seleccionar todo

<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/

/**
*/

/**
* @ignore
*/
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);

// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();

$http_kernel = $phpbb_container->get('http_kernel');
$symfony_request = $phpbb_container->get('symfony_request');
$http_kernel->terminateWithException(
	new \phpbb\exception\http_exception(403, 'NO_AUTH_OPERATION'),
	$symfony_request
);

404.php

Código: Seleccionar todo

<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/

/**
*/

/**
* @ignore
*/
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);

// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();

$http_kernel = $phpbb_container->get('http_kernel');
$symfony_request = $phpbb_container->get('symfony_request');
$http_kernel->terminateWithException(
	new \phpbb\exception\http_exception(404, 'PAGE_NOT_FOUND'),
	$symfony_request
);

En ellas no es necesario crear un archivo HTML (plantilla), porque lo anterior intercepta la excepción HTTP y muestra el mensaje de error, además que envía la cabecera correcta dependiendo del error.

Código: Seleccionar todo

curl -IL http://localhost/forum/404.php
HTTP/1.1 404 Not Found
...

Sin embargo para errores del servidor (5xx) personalmente no recomendaría usar este método porque, por ejemplo, si pones tu sitio en modo mantenimiento (503) y comienzas a remplazar archivos, es probable que esa página muestre excepciones no tratadas, errores de archivos faltantes o rutas inexistentes y en éste último caso tal vez (no estoy muy seguro) podrías tener unos bucles por las páginas de error (503 > 404 > 503 > ... > 500).

Al colocar tu sitio en mantenimiento (503) estas redirigiendo todo el tráfico a esa página, y eso incluyen las hojas de estilo e imágenes alojadas en tu servidor.

En el caso de los errores 500, probablemente algunos si mostrarían la página de error de manera correcta, pero otros posiblemente no.

En esos casos (5xx) personalmente recomendaría usar páginas estáticas, y que no usen CSS, JS o imágenes alojado en tu servidor.


¿Cómo crear páginas personalizadas para cuando se produce un error en la web?

Publicado: 14 Abr 2020, 21:24
por karbiko

Muchas gracias, Alfredo.
Voy a seguir las instrucciones dadas..

Lo que no me ha quedado claro es lo de redirigir los 50x a una página estática...
¿Cómo lo haría? Creo entender que el método ese que aparece en la guía antigua lo que hace es precisamente redireccionar a una página estática cuando encuentra un error 403 o 404.. ¿Podría seguir ese método, teniendo unas páginas estáticas para cada tipo de error?
Y de ser así, como tengo mi foro en la carpeta ./foro, y tanto en la raíz ./ como en ./foro tengo sendos archivos .htaccess, ¿en cuál de ellos integraría el código para el caso de que se encontrase un error?

Además, cuando en esa guía indican:

richi_knight escribió: 15 Oct 2014, 19:30

Código: Seleccionar todo

<?php
    define('IN_PHPBB', true);
    $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
...
...
?>

Y luego añade:

Para cambiar el título de la página:

Código: Seleccionar todo

    page_header('TÍTULO DE LA PÁGINA ERROR 404 NO ENCONTRADO'); 

Lo guardamos con el nombre "error-404.php" y lo subimos a la raiz de phpBB3.

Ésto último, ¿dónde lo pone? Porque veo que el el primer texto, ha cerrado el código php: ?>
¿En el mismo archivo error-404.php??


¿Cómo crear páginas personalizadas para cuando se produce un error en la web?

Publicado: 14 Abr 2020, 21:54
por AlfredoRamos
karbiko escribió: 14 Abr 2020, 21:24

Lo que no me ha quedado claro es lo de redirigir los 50x a una página estática...
¿Cómo lo haría?

Con una página HTML básica, por ejemplo ésta es la que uso para poner en modo mantenimiento a mis clientes:

503.html

Código: Seleccionar todo

<!DOCTYPE html>
<html lang="es">
	<head>
		<meta charset="utf-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1" />
		<title>Servicio temporalmente no disponible - HTTP 503</title>
		<meta name="robots" content="none" />
		<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.0/normalize.min.css" />
		<link rel="stylesheet" href="https://gistcdn.githack.com/AlfredoRamos/7373ba3506e10358bb84648af9a808b0/raw/975ab5028fa2fddfe548bc9d361a5e3ea794445c/grids.min.css" />
		<link rel="stylesheet" href="https://gistcdn.githack.com/AlfredoRamos/d5c21255bfe769fa5bc187c960222112/raw/4015f3e6167e948e235a65c78ee64e75a0775e13/503.css" />
	</head>
	<body>
		<div class="container">
			<div class="row center-xs">
				<section id="content" class="col-md-8">
					<header class="header">
						<h1 class="title">503</h1>
					</header>
					<article class="post">
						<header class="header">
							<h2 class="title">Servicio temporalmente no disponible</h2>
						</header>
						<div class="body">
							<p>Este sitio actualmente se encuentra en mantenimiento. Por favor intente más tarde.<p>
						</div>
					</article>
				</section>
			</div>
		</div>
	</body>
</html>

Y en el .htaccess, entre otras cosas, especifico esa página de error:

Código: Seleccionar todo

ErrorDocument 503 /503.html
karbiko escribió: 14 Abr 2020, 21:24

Creo entender que el método ese que aparece en la guía antigua lo que hace es precisamente redireccionar a una página estática cuando encuentra un error 403 o 404.. ¿Podría seguir ese método, teniendo unas páginas estáticas para cada tipo de error?

Claro, de hecho es así como se hace de forma predeterminada, usando archivos HTML.

karbiko escribió: 14 Abr 2020, 21:24

Y de ser así, como tengo mi foro en la carpeta ./foro, y tanto en la raíz ./ como en ./foro tengo sendos archivos .htaccess, ¿en cuál de ellos integraría el código para el caso de que se encontrase un error?

Buena pregunta.

Algunas de las directivas que especifiques en un archivo .htaccess se heredarán en los archivos .htaccess subsecuentes presentes en subdirectorios, a menos que sobreescribas lo que sea que quieras o no quieras que hagan los archivos subsecuentes.

Por comodidad podrías crear esas páginas estáticas, así como las directivas ErrorDocument en la raíz ./, y deberían funcionar también en tu foro (./foro).

Si quieres remplazar la página (con otro estilo por ejemplo) únicamente en tu foro, tendrías que colocar los archivos HTML y las directivas ErrorDocument en el .htaccess de tu foro ./foro pero con la ruta correcta, por ejemplo:

Código: Seleccionar todo

ErrorDocument 403 /foro/403.html

Nótese que comienza con /foro la ruta al archivo 403.html, porque debe ser una ruta absoluta. Si colocaras únicamente /403.html buscaría ese archivo en la raíz (./) en lugar de en tu foro (./foro).

karbiko escribió: 14 Abr 2020, 21:24

Ésto último, ¿dónde lo pone? Porque veo que el el primer texto, ha cerrado el código php: ?>

Si le das scroll al texto, ya lo incluye, simplemente te indica que línea debes modificar, aunque podrías remplazar esa línea con:

Código: Seleccionar todo

	$language = $phpbb_container->get('language');
	page_header($language->lang('PAGE_NOT_FOUND'));

Para que tome ese texto de las traducciones.

Los caracteres ?> al final de los archivos PHP ya no son recomendados, los puedes eliminar.

Creo que a esa guía le vendría bien una actualización.


¿Cómo crear páginas personalizadas para cuando se produce un error en la web?

Publicado: 14 Abr 2020, 22:10
por karbiko

Muchas gracias!!

Ahora voy mucho más "aclarado" ..


¿Cómo crear páginas personalizadas para cuando se produce un error en la web?

Publicado: 14 Abr 2020, 22:18
por ThE KuKa
AbaddonOrmuz escribió: 14 Abr 2020, 21:54

Creo que a esa guía le vendría bien una actualización.

Lo intento abordar está misma semana. :geek:


¿Cómo crear páginas personalizadas para cuando se produce un error en la web?

Publicado: 14 Abr 2020, 22:31
por ThE KuKa

Pienso que esta extensión con un pequeño cambio en /config/services.yml debería funcionar...
https://github.com/ForumHulp/errorpages

Lo se, hace tiempo que no se actualiza... :?:


¿Cómo crear páginas personalizadas para cuando se produce un error en la web?

Publicado: 15 Abr 2020, 17:37
por karbiko

¡¡Qué buena!!

Voy a verla.. Gracias, Raúl!