[PHP] errore 404 e invio mai path pagina con link interrotto

antonio50

Nuovo Utente
15 Ott 2018
1
0
1
Buongiorno,
ho un sito dinamico con php/mysql su piattaforma windows.
Nel body delle pagine (circa 200) c'è del testo con link ad altre pagine del sito
Per gestire i link interrotti uso il file web.config con il seguente codice:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<httpErrors existingResponse="Replace" errorMode="Custom">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="http://www.miosito.it/errore404.php" responseMode="Redirect" />
</httpErrors>
</system.webServer>
</configuration>
Al click su un link interrotto, l'utente viene rediretto alla pagina errore404.php
Problema:
Vorrei che dalla pagina errore404.php, quando è caricata nel browser, mi venisse inviata una email del alla pagina che contiene il link interrotto.
Per conoscere l'indirizzo di provenenza, in condizioni "normali", basterebbe usare $_SERVER["HTTP_REFERER"] e inviarne il valore a un indirizzo email prefissato.
Purtroppo al caricamento della pagina errore404.php il risultato di $_SERVER["HTTP_REFERER"] è una stringa vuota.
Domando:
Quello che intendo fare (leggere/conoscere la pagina che contiene il link interrotto), è fattibile?
E se è fattibile come è possibile fare quello che ho descritto?
 
La gestione delle pagine 404 conviene sempre farla da codice e non da web.config o htaccess, spesso ci si perdono pezzi per strada...
$_SERVER["REQUEST_URI"]
Restituisce l'url richiesto in questo caso la pagina 404 quindi non va bene, a meno che nell'url rimanga la richiesta, quindi non andrebbe bene....
La cosa che farei personalmente è un hooks/middleware (ossia una risorsa in ascolto su tutta l'applicazione) tale da registrare ogni richiesta e/o azione, eliminando dal web.config la gestione dell'errore.
Altra cosa degna di nota sarebbe la gestione delle URL attraverso un file di route capace di gestire le richieste.
Con queste due modifiche ti assicuri non solo la gestione completa degli headers ma anche la gestione dei 404 forzati.

Tornando al tuo problema, se non fai un redirect ma cambi solo la risposta lasciando l'url errato puoi eseguire quello che @LinuxOhYeah ti ha suggerito (cosa che non fai), altrimenti devi modificare un pò di logica di routing.
 

Discussioni simili