2011-12-12 10 views
5

Sto usando .htaccess per mostrare pagine HTML personalizzate per errori (401, 404, 500 .. ecc.). Voglio limitare l'accesso diretto alla cartella errori che contiene le pagine html. All'interno del file .htaccess della cartella errori, ho il seguente:Limita l'accesso diretto alle pagine di errore

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

Questo in realtà non sembra funzionare ed ottengo:

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

Quali modifiche devo apportare alla .htaccess file per farlo funzionare. Mi chiedo anche se funzionerebbe se inserisco la cartella errori al di fuori della cartella public_html?

+0

non ottengo un errore 500 –

risposta

0

Nel file .htaccess, reindirizzare tutti gli errori in un file php

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

in uso errors.php $ _SERVER [ 'REDIRECT_STATUS'] con un'istruzione if altro per rilevare gli errori e mostrare messaggi personalizzati

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 
} 

Questo è un List of HTTP status codes. Scrivi un'altra istruzione if per ogni errore che vuoi rilevare. Errori non rilevati cadrà nel blocco else

+2

Se la pagina di errore è stata letta direttamente, allora '$ _SERVER ['REDIRECT_STATUS']' potrebbe non essere impostato affatto - sembrerebbe dipendere dal server. (Nel qual caso il tuo blocco 'else' catturerà non solo" tutti gli altri codici di errore ", ma anche gli accessi diretti). – MrWhite

5

Ecco cosa si dovrebbe mettere nel vostro .htaccess (nel vostro public_html)

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

farmi sapere se funziona

+0

Non si sta davvero apportando la modifica –

+0

hai altre regole nel tuo .htaccess? –

Problemi correlati