Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776

    Il modo migliore e corretto per rispondere con code 404 non disponibile

    Ciao a tutti,

    ho cercato su internet come rispondere quando una pagina non è disponibile, ma ho trovato diverse forme per farlo, vorrei un vostro parere, per favore leggete il mio caso specifico sotto riportato.

    Il mio caso specifico:

    il mio intero sito si basa sulla pagina index.php
    arrivano dei parametri tramite GET che, con delle regole htaccess, trasformo.
    Ad esempio la richiesta:
    miosito.it/prodotto/23.html
    sarà trasformata in:
    miosito.it/index.php?livello0=prodotto&livello1=23
    verifico se questi parametri possono restituire una richiesta specifica, della serie se il prodotto esiste ti faccio vedere il codice html specifico altrimenti DEVO RESTITUIRE UN CODICE D'ERRORE 404.

    Qui viene il mio dilemma, a questo punto cosa è meglio fare:

    Attualmente, a fronte di una richiesta con una pagina non esistente, faccio un redirect:
    Codice PHP:
       $direccion "Location:http://miosito.it/errore404.html";
       
    header("http/1.1 404 not found");
       
    header($direccion); 
    La richiesta, tramite htaccess viene trasformata in:
    miosito.it/index.php?livello0=errore404
    a questo punto viene restituita la vista della pagina d'errore!

    É corretto farlo in questo modo?

    Grazie,
    Roberto
    Ultima modifica di robynosse; 03-09-2015 a 10:02

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Non ci vedo niente di male.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Non ci vedo niente di male.
    Ciao, grazie della risposta!

    Però non mi è chiara una cosa, sto utilizzando "live HTTP Headers" su chrome
    Il codice che mi restituisce, nella pagina di errore, è un 302 non 404.

    Se, a fronte di una pagina non esistente, utilizzo solo il codice:
    Codice PHP:
       
       header
    ("http/1.1 404 not found"); 
    allora vedo con "live HTTP Headers" effettivamente che l'indirizzo richiesto www.miosito.it/blabla.html ha un codice 404

    Se lascio tutte le linee

    header("http/1.1 404 not found");
    $direccion = "Location:http://miosito.it/errore404.html";
    header($direccion);

    "live HTTP Headers" mi dice che la pagina:
    miosito.it/paginaerrore404.html ha un codice 302(perchè ovviamente sta facendo un redirect, ed è il valore di default della funzione header).

    Se io ad esempio vado sulla pagina di sony e scrivo:
    sony.it/blablabla.html
    mi visualizza direttamente la pagina d'errore non fa un redirect 302 infatti con "live HTTP Headers" vedo che la pagina sony.it/blablabla.html ha un codice 404 not found.

    Quindi quel redirect 302 ci deve essere o non ci deve essere?

    Grazie,
    Roberto



  4. #4
    il problema è che fai il redirect, quindi non lo fare. puoi fare in vari modi:

    1) lasci solo header 404 (ma è uno schifo)

    2) lasci header 404 e poi fai un include della pagina di errore via php in maniera da visualizzare la pagina di comodo ( vedi come fa questo http://stackoverflow.com/a/1381220 )

    3) Fai rispondere solo con 404 e poi setti apache a visualizzare la pagina di errore quando hai 404: http://stackoverflow.com/a/9577705
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776
    Quote Originariamente inviata da Santino83_02 Visualizza il messaggio
    il problema è che fai il redirect, quindi non lo fare. puoi fare in vari modi:

    1) lasci solo header 404 (ma è uno schifo)

    2) lasci header 404 e poi fai un include della pagina di errore via php in maniera da visualizzare la pagina di comodo ( vedi come fa questo http://stackoverflow.com/a/1381220 )

    3) Fai rispondere solo con 404 e poi setti apache a visualizzare la pagina di errore quando hai 404: http://stackoverflow.com/a/9577705
    Riguardo la prima opzione, hai ragione, è uno schifo.
    La terza non può essere la mia soluzione in quanto il sito è multilingua quindi devo rispondere in modo da restituire il messaggio nella lingua dell'utente.

    In questo caso ho optato per la seconda ipotesi, il problema è abbastanza complesso ma non impossibile però, in quanto devo modificare varie linee di codice avendo strutturato il sito in MVC.

    Per quanto riguarda i primi 3 livelli di pagina, ho già risolto in quanto ho una classe Direzione che si incarica di vedere se la direzione è valida, se non è valida chiamo classe e metodo che visualizza l'errore.
    Il problema adesso devo risolverlo se c'e' un livello 4 di pagina(quindi sono già all'interno della classe e metodo richiesti), in quanto i dati di questo livello si leggono da un DB e la classe Direzione ha già validato o meno la direzione stessa.

    miosito.it/classe/metodo/opzione.html

    Prima risolvevo facendo un redirect 302 alla pagina d'errore se non trovavo il dato corrispondente all'interno del DB, ma adesso, non potendolo più fare, devo risolvere in altro modo.


    Grazie,
    Roberto

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776
    Ok, mi è venuta in mente la soluzione:

    tutte le classi controller ereditano dalla classe ControllerPrototipo.
    Nella classe prototipo scrivo un metodo che mi visualizza la vista dell'errore oltre a settare errore 404(header) e che, detto metodo, accetta come parametro il dettaglio dell'errore.
    Quindi quando non sarà presente il dato, chiamerò il metodo con il dettaglio dell'errore e il gioco è fatto!

    Roberto

  7. #7
    Ti sei capito abbastanza da solo, ma l'importante è che hai risolto.

    Il problema concettuale è che il framework MVC deve effettuare una sola operazione:

    HttpRequest -> operazione -> HttpResponse

    Dove "operazione" è tutto il tuo framework. Quindi qualsiasi op di handling della request http deve produrre una response http. Nel to caso, devi/dovevi strutturare la cosa in maniera da tornare una response che contenesse la pagina 404.

    buon per te che hai risolto
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.