2011-12-12 22 views
5

Estoy usando .htaccess para mostrar la página HTML personalizada para errores (401, 404, 500, etc.). Quiero restringir el acceso directo a la carpeta de errores que contiene las páginas html. Dentro del archivo .htaccess de la carpeta errores, tengo el siguiente:Restringir el acceso directo a las páginas de error

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain\.com 
RewriteRule \.(html|htm)$ - [F] 

Esto no parece realmente a trabajar y me sale:

a 500 Internal Server Error error was encountered while trying to use an 
ErrorDocument to handle the request. 

¿Qué cambios tengo que hacer a la .htaccess file para que esto funcione. También me pregunto si funcionaría si guardo la carpeta de errores fuera de la carpeta public_html.

+0

no recibo un error de 500 –

Respuesta

0

En el archivo .htaccess, redirigir todos los errores a un archivo php

ErrorDocument 403 /errors.php 
ErrorDocument 404 /errors.php 
ErrorDocument 500 /errors.php 

en uso errors.php $ _SERVER [ 'REDIRECT_STATUS'] con una instrucción else if para detectar los errores y mostrar mensajes personalizados

if($_SERVER['REDIRECT_STATUS'] == 403) 
{ 
    die("Forbidden"); 
} 
else if($_SERVER['REDIRECT_STATUS'] == 404) 
{ 
    die("NOT FOUND"); 
} 
else if($_SERVER['REDIRECT_STATUS'] == 500) 
{ 
    die("Server Error"); 
} 
else if($_SERVER['REDIRECT_STATUS'] == 200) 
{ 
// user is trying to directly access the errors page, redirect to index.php 
header("Location: index.php"); 
} 
else 
{ 
    // all other error codes 
} 

Aquí hay un List of HTTP status codes. Escriba una declaración else if para cada error que desee detectar. Errores no detectados caerán en el bloque else

+2

Si se ha accedido directamente a la página de error, '$ _SERVER ['REDIRECT_STATUS']' no se puede configurar en absoluto; parece depender del servidor. (En cuyo caso, su bloque 'else' detectará no solo" todos los demás códigos de error ", sino también los accesos directos). – MrWhite

5

Esto es lo que debe poner en su .htaccess (en su public_html)

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^(www\.)?mydomain\.com 
RewriteRule \.(html|htm)$ - [F] 

Avísame si funciona

+0

No está realmente haciendo el cambio –

+0

tiene otras reglas en su .htaccess? –

Cuestiones relacionadas