Apache - Personalizar errores

Actualizaciones:

22/08/15 Mensaje de mantenimiento web

En .htaccess o VirtualHost:

<Directory /home/user/datos/www/luismido.es/>
    ....
    ....
    ....

        ErrorDocument 401 /errorPages/errores.php
        ErrorDocument 404 /errorPages/errores.php
    ....
    ....
    ....
</Directory>

En la página para manejar todos los errores (errores.php):

<?php
$status = $_SERVER['REDIRECT_STATUS'];
$codes = array(
    400 => array('400 Bad Request', 'The request cannot be fulfilled due to bad syntax.', 'img.gif'),
    401 => array('401 Unauthorized</p>', 'Authentication is required and has failed or has not been provided.', 'img.gif'),
    403 => array('403 Forbidden', 'The server has refused to fulfil your request.', 'img.gif'),
    404 => array('404 Not Found', 'The page you requested was not found on this server.', 'img.gif'),
    405 => array('405 Method Not Allowed', 'The method specified in the request is not allowed for the specified resource.', 'img.gif'),
    408 => array('408 Request Timeout', 'Your browser failed to send a request in the time allowed by the server.', 'img.gif'),
    500 => array('500 Internal Server Error', 'The request was unsuccessful due to an unexpected condition encountered by the server.', 'img.gif'),
    502 => array('502 Bad Gateway', 'The server received an invalid response while trying to carry out the request.', 'img.gif'),
    503 => array('503 Service temporarily unavailable', 'The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.', 'img.jpg'),
    504 => array('504 Gateway Timeout', 'The upstream server failed to send a request in the time allowed by the server.', 'img.gif'),
);

$title = $codes[$status][0];
$message = $codes[$status][1];
$img = $codes[$status][2];
if ($title == false || strlen($status) != 3) {
       $message = 'Please supply a valid HTTP status code.';
}

echo '<img src="/img/'.$img.'">';
echo '<span>'.$title.' detected</span>';
echo '<span>'.$message.'</span>';
?>

Actualizaciones:


22/08/15 Mensaje de mantenimiento web

Fuentes:

Crear un fichero que estará vacío pero que servirá de referencia para que apache detecte que la web está en mantenimiento. En mi caso he creado el fichero mantenimiento.habilitado

Para volver a mostrar la web online, basta con eliminar o renombrar el fichero, por ejemplo a mantenimiento.deshabilitado

Este archivo irá en la raiz.

En .htaccess o VirtualHost:

RewriteEngine on

#Mantenimiento o actualizacion de aplicacion renfeturnos
#Aplicar si se accede a la carpeta renfeturnos. En mi caso esta web es una carpeta perteneciente a otro dominio
RewriteCond %{REQUEST_URI} ^/renfeturnos [NC]
#Que no se cumpla para nuestras IPs
#RewriteCond %{REMOTE_ADDR} !^85\.56\.140\.224
#RewriteCond %{REMOTE_ADDR} !^85\.156\.10\.226
#Comprobar si existe el fichero mantenimiento.habilitado
RewriteCond %{DOCUMENT_ROOT}/renfeturnos/mantenimiento.habilitado -f
#No aplicar la regla si se están sirviendo las páginas que intervienen,
#mantenimiento.habilitado,css,js,img... (lo que daría lugar a reescrituras circulares)
#Pagina con los errores y sus codigos
RewriteCond %{SCRIPT_FILENAME} !/renfeturnos/errorPages/errores.php
#Imagenes del error
RewriteCond %{SCRIPT_FILENAME} !/renfeturnos/img/*
#Estilos del error
RewriteCond %{SCRIPT_FILENAME} !/renfeturnos/css/*
#Redireccionar al error
RewriteRule ^.*$ /renfeturnos/errorPages/errores.php [R=503,L]
#Personalizar error
ErrorDocument 503 /renfeturnos/errorPages/errores.php
#Evitar el caché para cuando volvamos a modo online 
Header Set Cache-Control "max-age=0, no-store"

Ya solo queda reiniciar apache para actualizar la nueva configuración.

« Linux

Si no se indica lo contrario, el contenido de esta página se ofrece bajo Creative Commons Attribution-ShareAlike 3.0 License