E' opportuno personalizzare la pagina di errore codice
404. Restituire un codice 404 quando una pagina non viene trovata e'
importante per i motori e personalizzarla e' importante per non perdere
gli utenti che arrivano da un link non aggiornato o digitando un url
sbagliata.
Se ricorrete ad esempio ad una ridirezione 302 (temporanea), invece di
utilizzare il codice 404, questo può condurre i motori di ricerca ad
attribuire, alla pagina inizialmente richiesta, il contenuto della
pagina verso la quale l'utente (o il motore) viene dirottato. Questo
puo' creare problemi di contenuto duplicato ("duplicate content").
E' meglio non confondere i motori e dare loro l'informazione giusta. Se
restituite un codice 200 (codice di OK), che dovrebbe essere il codice
di ritorno delle altre pagine del sito, ogni volta che il motore
visiterà una pagina che non esiste più, potrebbe "vedere" lo stesso
contenuto a seconda di come è stata personalizzata la pagina. Ci
troviamo di nuovo con un problema di "duplicate content".
Una ridirezione di tipo 301 (permanente) e' preferibile ad un codice 404
solo quando la pagina richiesta esiste ancora ma ha cambiato indirizzo.
Mondo Unix
Creare un file .htaccess (attenzione a
punto iniziale e alle maiuscole/minuscole) nella cartella principale del
sito (HTTPDOCS) dove si inserira' il seguente codice:
Se si ha la necessita' di gestire solo il codice 404, si puo'
riportare solo la riga del 404.
Tali pagine di errore non funzionano per i file .php,
e a tal fine e' possibile
risolvere nel seguente modo.
Basta aggiungere nel file .htaccess di cui sopra le
seguenti informazioni:
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule \.php$ /errore/errore404.htm
Spiegazione: Se non si trova (!-f) il path
richiesto (%{SCRIPT_FILENAME}) sostituisce cio' che termina ($) con
.php (\.php) con la pagina di errore 404 che in questo caso si trova
nella cartella /errore/errore404.htm.
Trasferire/creare il file .htaccess nella root del dominio e la
cartella errore sempre nella root del dominio
-assegnare alla cartella errore CHMOD 755, alla sottocartella
log CHMOD 755 ed al file in essa contenuto, errore.txt CHMOD
666
Le uniche modifiche da apportare nel file errore.php sono le
seguenti
#Notifica di errore al webmaster.
$notifica="linkbruttocane@aruba.it"; sostituire con il vostro
indirizzo email
#Nome del tuo dominio
$nomesito="nome del tuo dominio"; sostituire con il nome del vostro
dominio
#Link cliccabile per tornare alla home od ad una pagina a scelta.
$ritornahome="http://www.linkbruttocane.com"; sostituire con il link
che preferite
Nel caso di
Hosting sulla nuova piattaforma Windows 2003, e' possibile,
limitatamente alle applicazioni asp.net e gestite tramite web.config,
reindirizzare l'errore 404 delle pagine aspx, usando ad esempio un
codice come questo web.config
Restituzione di un codice di errore in PHP e ASP:
<%
Response.Status = "404 NOT FOUND"
%>
<?php
header("HTTP/1.0 404 Not Found");
?>
Script Asp per inoltro email su pagina di errore (e' da
associare ad un javascript):
<%
Dim objMsg
Dim strReferer
Dim strPagina
Dim strTo
Dim strIp
Dim strSubject
Dim strBody
strReferer = "eventuale referer: " & Request.ServerVariables("HTTP_REFERER") & vbNewLine
strPagina = "pagina cercata: " & Request.ServerVariables("URL") & vbNewLine
strIp = "IP utente: " & Request.ServerVariables("REMOTE_ADDR") & vbNewLine
strTo = "webmaster@sitomio.com"
strSubject = "Errore 404 - sitomio.com"
strBody = "Un errore 404 Error si è verificato nel tuo sito" & vbNewLine & vbNewLine
Set objMsg = Server.CreateObject("CDONTS.NewMail")
objMsg.From = "webmaster@sitomio.com"
objMsg.To = strTo
objMsg.Subject = strSubject
objMsg.Body = strBody & strPagina & strReferer & strIp
objMsg.Send
Set objMsg = Nothing
%>
Script PHP per inoltro email:
<?
if(!isset($_GET['url'])){
?>
<script language="JavaScript">
var i = window.location.href;
var k = document.referrer;
var uri = i.replace("http://www.sitomio.com/","");
var p =
"http://www.sitomio.com/404_personal.php"+"?url="+uri+"&ref="+k;
location.href=p;
</script>
<?
} else {
$url =
$_GET['url'];
$ref =
$_GET['ref'];
unset($_GET);
?>
<meta http-equiv="refresh" content="5;URL=http://www.******.com">
<?
// per ottenere l'url che ha generato
l'errore
$to=
$from;
$subject=
"Errore 404 - ********.com";
$mailheaders=
"From: $from";
$body .=
"Un errore 404 Error si è verificato nel
tuo sito:\n\n\n";
$body .=
"pagina richiesta: ".$url."\n\n";
if($referer !=
""){
$body .=
"Referer: ".$referer."\n\n";
}
$body .=
"Ip utente: ".$ip."\n\n";
// ora invia la mail
mail($to,
$subject,
$body,
$mailheaders);
}
?>
Altro Script in asp:
<%
' errori da pagine ASP
pagina = Replace(Request.QueryString,"404;","")
' errori da pagine ASP.NET - bisogna abilitarlo da web.config
ifLen(Request.QueryString("aspxerrorpath"))>0 then
pagina = Request.QueryString("aspxerrorpath")
endif
' pagina
strRef = Request.ServerVariables("HTTP_REFERER")
' ip dell'utente
strIP = request.servervariables("REMOTE_HOST")
strBodyText = "URL: " & pagina _
& strCRLF & _
"Referer: " & strRef _
& strCRLF & _
"Browser: " & Request.ServerVariables("HTTP_USER_AGENT") &_
strCRLF & _
"IP: " & strIP & VbCrLf & _
"Cookies: " & Request.Cookies
' invio l'e-mail
Set objMail = Server.CreateObject("CDONTS.NewMail")
objMail.Send "support@dominio", "support@dominio", "Errore 404", strBodyText, 0
Set objMail = nothingResponse.write ("La pagina che hai richiesto non è presente su questo sito")
Response.write ("<BR>L'amministratore è stato avvisato via e-mail.")
%>