Personalizzare errore 404

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Personalizzare errore 404

Messaggio da samiel »

In un sito ho "personalizzato" l'errore 404 in caso si cerchi di aprire
una pagina non (ancora) presente col seguente codice:

Codice: Seleziona tutto

<?php if(file_exists("$folder/$pagina.php")) include("$folder/$pagina.php"); else include("moduli/nondisp.php"); ?>
e ho ovviamente un file nondisp.php.
Vorrei però inserire anche una pagina diversa se il problema
fosse generato dal tentativo di aprire un link a un oggetto
(come un pdf) non ancora caricato.
Come possa fare in questo caso?

Grazie
M.

Avatar utente
shark1500
Linux 3.x
Linux 3.x
Messaggi: 785
Iscritto il: gio 3 apr 2008, 14:33
Slackware: current
Kernel: 2.6.27.7-smp
Desktop: kde
Località: Modna

Re: Personalizzare errore 404

Messaggio da shark1500 »

E` un po` brutto il tuo metodo.

Basta aggiungere la seguente opzione nel file http.conf

Codice: Seleziona tutto

ErrorDocument 404 /errordoc-404.shtml
Dove (ovviamente) cambi la pagina e ci metti quella che vuoi, cosi` se non esiste la pagina richiama quel file li`.
Ultima modifica di shark1500 il sab 30 ott 2010, 10:35, modificato 1 volta in totale.

samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: Personalizzare errore 404

Messaggio da samiel »

In http.conf? Ma il sito mica è in un mio server,
è nel server della provincia di Venezia!
Non so se ho capito bene la tua indicazione,
ma pensavo piuttosto di dover mettere un redirect
relativo allo header dell'errore in .htaccess...
Il fatto è che con la mia soluzione
se si richiama una pagina inesistente.
si apre comunque una pagina del sito stesso
con la sua formattazione e i menu.
Invece se metto una cosa del tipo

Codice: Seleziona tutto

ErrorDocument 404 /moduli/error.php
e creo una pagina error.php vedo solo una pagina bianca
col messaggio...

M.

roberto67
Packager
Packager
Messaggi: 363
Iscritto il: lun 14 set 2009, 18:55
Slackware: 15.0 multilib
Desktop: plasma 5
Contatta:

Re: Personalizzare errore 404

Messaggio da roberto67 »

mm.. mi sa che allora apache non ti consente di usare .htaccess (AllowOverride none) :cry:

samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: Personalizzare errore 404

Messaggio da samiel »

Sì che mi consente di usarlo,
ma volevo fare un redirect
a una pagina del sito in caso di errore...

M.

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: Personalizzare errore 404

Messaggio da conraid »

è proprio quello il metodo

Codice: Seleziona tutto

ErrorDocument 404 /error.php
o quella che vuoi, l'importante è che esista, se continua a darti errore 404 semplicemente hai sbagliato path
Poi in quella pagina, puoi usare anche cose belline, io per esempio ho solamente la pagina error.php e redirigo li tutti gli errori. In questa pagina controllo $_SERVER['REDIRECT_STATUS'] ed in base a quello mostro immagine diverse e messaggi personalizzati

Per l'altra domanda http://www.php.net/manual/en/function.finfo-file.php

samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: Personalizzare errore 404

Messaggio da samiel »

No, funziona nel senso che vedo il messaggio incluso in error.php.

La mia domanda nasceva dal fatto che col codice già incluso,
ossia il sopracitato

Codice: Seleziona tutto

<?php if(file_exists("$folder/$pagina.php")) include("$folder/$pagina.php"); else include("moduli/nondisp.php"); ?>
in caso di errore (quando si cerca di aprire una pagina che no esiste)
il messaggio appare in una tipica pagina del sito, formattata come tutto il resti
e con i menu, per cui è facile tornare in un'altra sezione.

Invece, nel caso si cerchi di aprire un oggetto non presente,
come un jpg o un pdf non caricato, appare silo il messaggio
invocato tramite .htaccess. Invece io volevo, come sopra,
che ci fosse il reindirizzamento a una pagina del sito.

Da quello che capisco potrei eliminare nondisp.php
e creare un unico error.php contenente la funzione
$_SERVER['REDIRECT_STATUS']. Provo a vedere
come si gestiscono in questo caso i tipi di errore...

Intanto grazie
M.

samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: Personalizzare errore 404

Messaggio da samiel »

Allora... ho creato un error.php così:

Codice: Seleziona tutto

<?php

// Get Variables
$error = $_SERVER['REDIRECT_STATUS'];
$referring_url = $_SERVER['HTTP_REFERER'];
$requested_url = $_SERVER['REQUEST_URI'];
$referring_ip = $_SERVER['REMOTE_ADDR'];
$server_name = $_SERVER['SERVER_NAME'];

//echo $error;

// Error messages to display
switch ($error) {

# Error 400 - Bad Request
case 400:
?>
<h2>Errore 400 - Richiesta erronea</h2>
<p>L'indirizzo richiesto non &egrave; raggiungibile</p>
<?
break;

# Error 401 - Authorization Required
case 401:
?>
<h2>Errore 401 - Autorizzazione richiesta</h2>
<p>L'indirizzo richiesto richiede una previa autenticazione</p>

<?
break;

# Error 403 - Access Forbidden
case 403:
?>
<h2>Errore 403 - Accesso vietato</h2>
<p>L'accesso all'indirizzo richiesto &egrave; vietato</p>
<?
break;

# Error 404 - Page Not Found
case 404:
?>
<h2>Errore 404 - File non trovato</h2>
<p>L'oggetto richiesto non esiste</p>
<?
break;

# Error 500 - Server Configuration Error
case 500:
?>
<h2>Errore 500 - Errore di configurazione del server</h2>
<p>L'indirizzo richiesto risulta a un errore di configurazione del server </br>
Se possibile, contattare il webmaster</p>
<?
break;

# Unknown error
default:
?>
<h2>Errore sconosciuto</h2>
<p>Dovrebbe essere impossibile vedere questa pagina. </br>
Controllare le impostazioni locali di sicurezza</p>
<?

}

// Display selected error message
echo($errordesc);
if (!$referring_url == '')
{
echo '<p><a href="'.$referring_url.'"><< Torna alla pagina precedente</a></p>';
}
else
{
echo '<p><a href="javascript:history.go(-1)"><< Torna alla pagina precedente</a></p>';
}
?>
In index.php ho lasciato (ma non sono sicuro)

Codice: Seleziona tutto

<div id="content">
<?php
if(file_exists("$folder/$pagina.php")) include("$folder/$pagina.php");
else include("moduli/error.php");
?>
</div><!--content-->
Problema:
Mentre se cerco di caricare una pagina che non esiste
vedo una normale pagina del sito, col corretto messaggio
di errore impostato in error.php, invece
se cerco di scaricare un file che non esiste
(come da un link a un pdf che non c'è nel server)
mi appare correttamente il messaggio di error.php.
Ma la pagina è a sfondo bianco, senza alcuna intestazione.
Io invece volevo che il messaggio di errore
comparisse in una normale pagina...

M.

Avatar utente
danix
Staff
Staff
Messaggi: 3287
Iscritto il: ven 27 ott 2006, 19:32
Nome Cognome: Danilo M.
Slackware: 64 current
Kernel: 5.4.43 x86_64
Desktop: i3
Località: Siderno (RC)
Contatta:

Re: Personalizzare errore 404

Messaggio da danix »

Ciao Mauro, my 2 cents...
perchè non usi la struttura che c'è nel resto del sito anche nella pagina error.php e la richiami tramite htaccess come ti è stato consigliato? così ti eviti di doverla includere nella index del sito ma ti rimane comunque la stessa impaginazione... certo, magari è poco elegante e poco 'dinamica', ma almeno ti eviti quell'inclusione poco standard... In questo modo risolvi anche il secondo problema...
danix
myself ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: Personalizzare errore 404

Messaggio da samiel »

Credo che l'inghippo stia nell aparte finale di error.php, ossia

Codice: Seleziona tutto

// Display selected error message
echo($errordesc);
if (!$referring_url == '')
{
echo '<p><a href="'.$referring_url.'"><< Torna alla pagina precedente</a></p>';
}
else
{
echo '<p><a href="javascript:history.go(-1)"><< Torna alla pagina precedente</a></p>';
}
?>
Infatti io vorrei che il messaggio fosse stampato
ricorrendo smpre e comunque a una pagina formattata come il resto del sito.

Però una cosa non capisco:
perché i vari errori stampano la pagina bianca
di Apache col messaggio e invece l'errore sconosciuto
mi apre una pagina formattata con tanto di menu ecc?
Ce sicuramente un errore che mi sfugge...

M.

Rispondi