Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Problemino htaccess

  1. #1
    Utente di HTML.it L'avatar di sandrone65
    Registrato dal
    May 2009
    residenza
    Guidonia Montecelio
    Messaggi
    129

    Problemino htaccess

    Ciao a tutti.
    Uso questa semplicissima regola nel mio file htaccess

    RewriteRule ([^/]+).html index.php [L]

    Per convertire qualsiasi URL che termina con ".html" in "index.php".
    Quindi se chiamo
    http://www.miosito/qualsiasicosa.html

    viene richiamato index.php dentro al quale mi gestisco la querystring come serve a me.
    Funziona tutto benone, però se disgraziatamente inserisco uno "/" nell'url, per esempio

    http://www.miosito/pippo/qualsiasicosa.html

    index.php viene richiamato ugualmente, ma si alterano tutte le path, quindi per esempio i percorsi delle immagini dei file CSS non funzionano più ed il sito si vede senza fogli di stile, s enza immagini ecc.

    Come posso riscrive il RewriteRule in modo da evitare il problema.
    Non ci arrivo proprio
    Qualcuno mi aiuta, per favore?

  2. #2
    Utente di HTML.it L'avatar di sandrone65
    Registrato dal
    May 2009
    residenza
    Guidonia Montecelio
    Messaggi
    129
    Ho aggirato il problema scrivendo all'inizio del mio index.php

    if(substr_count($_SERVER["REQUEST_URI"], "/")>1) {
    Header("Location: http://www.miosito.com/index.php");
    }

    Magari può servire a qualcuno, anche se ne dubito

  3. #3
    Utente di HTML.it L'avatar di Enoa
    Registrato dal
    Jul 2005
    Messaggi
    573

    Re: Problemino htaccess

    Originariamente inviato da sandrone65
    Ciao a tutti.
    Uso questa semplicissima regola nel mio file htaccess

    RewriteRule ([^/]+).html index.php [L]

    Per convertire qualsiasi URL che termina con ".html" in "index.php".
    Quindi se chiamo
    http://www.miosito/qualsiasicosa.html

    viene richiamato index.php dentro al quale mi gestisco la querystring come serve a me.
    Funziona tutto benone, però se disgraziatamente inserisco uno "/" nell'url, per esempio

    http://www.miosito/pippo/qualsiasicosa.html

    index.php viene richiamato ugualmente, ma si alterano tutte le path, quindi per esempio i percorsi delle immagini dei file CSS non funzionano più ed il sito si vede senza fogli di stile, s enza immagini ecc.

    Come posso riscrive il RewriteRule in modo da evitare il problema.
    Non ci arrivo proprio
    Qualcuno mi aiuta, per favore?
    leggendo anche il tuo secondo post, sono 2 problemi differrenti.
    Questa regola
    codice:
    RewriteRule ([^/]+).html index.php [L]
    trova un match se la stringa è formata da qualunque carattere eccetto "/", quindi in qualsiasicosa.html e nella seconda parte di pippo/qualsiasicosa.html
    Forse intendevi così?
    codice:
    RewriteRule ^([^/]+).html index.php [L]
    ma non funzionerebbe con url del tipo http://www.miosito/pippo/qualsiasicosa.html

    mi pare di capire che gestirai le richieste direttamente da php e allora ti basta questo:
    codice:
    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule . - [L]
    
    RewriteRule . index.php [L]
    il fatto che non ti carichi gli stili e le immagini è causato dal fatto che stai usando path relativi, il browser esegue la ricerca partendo dal path in cui si trova o crede di trovarsi, in questo caso cerca la risorsa con path relativo a "pippo/"

    ma non si capisce bene che tipo di url vuoi gestire

  4. #4
    Utente di HTML.it L'avatar di sandrone65
    Registrato dal
    May 2009
    residenza
    Guidonia Montecelio
    Messaggi
    129
    Ciao Enoa, innanzitutto grazie per la gentile e competente risposta
    Dunque, nel mio sito creo pagine dinamiche nella forma

    http://www.miosito.eu/pagina.html

    Con htaccess reindirizzo tutte le richieste verso index.php

    RewriteRule ^([^/]+).html index.php [L]

    Tramite index.php prendo la SERVER_REQUEST_URI, ne isolo la parte finale (cioè pagina.html), la confronto con una tabella nel db che mi dice quale record del db richiamare e il gioco è fatto.

    Qualunque richiesta nella forma

    http://www.miosito.eu/qualsiasipagina.html

    la gestisco bene (se la pagina non esiste carico la homepage per default), ma se per errore aggiungo uno "/" al percorso, per esempio

    http://www.miosito.eu/pippo/qualsiasipagina.html

    Il meccanismo funziona lo stesso, index.php viene richiamato, ma viene visto dal browser come se stesse nella cartella pippo, e quindi non vede immagini e fogli di stile.

    Quindi o carico immagini e CSS con la path assoluta come giustamente mi dici oppure uso il mio trucchetto di contare gli "/" nella SERVER_REQUEST_URI reindirizzando la pagina verso il percorso assoluto del mio sito qualora ne trovi più di uno.
    Mi chiedevo se potevo gestire la faccenda nel file .htaccess ma credo sia evidente che io debba mettermi a studiare Apache più seriamente di quanto abbia fatto finora
    Ti ringrazio e saluto

  5. #5
    Utente di HTML.it L'avatar di Enoa
    Registrato dal
    Jul 2005
    Messaggi
    573
    Ok, ma non gestisci a livello di codice il 404?
    pippo/qualunquecosa.html è un 404, non esisterà nel tuo db....

    Comunque questa:
    codice:
    RewriteRule ^([^/]+)\.html index.php [L]
    dovrebbe risolvere il problema

    Ti segnalo inoltre che nell'array $_SERVER viene creato un nuovo elemento quando entra in azione il rewrite:
    codice:
    $_SERVER['REDIRECT_URL']
    se esiste, la richiesta è stata riscritta, se non esiste la richiesta è diretta.

    Poi per rendere relativi certi path, puoi fare anche così, ma è più dispendioso rispetto ad usare path assoluti:
    codice:
    RewriteRule img/(.*) img/$1 [L]
    RewriteRule style/(.*) style/$1 [L]
    .....
    RewriteRule path_da_rendere_relativo/(.*) path_reale_in_forma_relativa_rispetto_ad_.htaccess/$1 [L]
    Se hai voglia di documentarti, inizia da qui:
    http://httpd.apache.org/docs/2.2/rewrite/

  6. #6
    Utente di HTML.it L'avatar di sandrone65
    Registrato dal
    May 2009
    residenza
    Guidonia Montecelio
    Messaggi
    129
    >Ok, ma non gestisci a livello di codice il 404?
    >pippo/qualunquecosa.html è un 404, non esisterà nel tuo db....
    >Comunque questa:
    >codice:RewriteRule ^([^/]+)\.html index.php [L]
    >dovrebbe risolvere il problema

    Siiiiiii è quello che serviva!!!
    Adesso infilando nell'url una cartella non mi carica più index.php e il browser si comporta come con un normale 404
    Very thanks!!!

    >Ti segnalo inoltre che nell'array $_SERVER viene creato un nuovo elemento quando entra >in azione il rewrite:
    >codice:$_SERVER['REDIRECT_URL']
    >se esiste, la richiesta è stata riscritta, se non esiste la richiesta è diretta.

    Ottimo a sapersi per gestire il tutto.

    >Poi per rendere relativi certi path, puoi fare anche così, ma è più dispendioso rispetto ad >usare path assoluti:
    >codice:RewriteRule img/(.*) img/$1 [L]
    >RewriteRule style/(.*) style/$1 [L]
    >.....
    >RewriteRule path_da_rendere_relativo/(.*) path_reale_in_forma_relativa_rispetto_ad_.htaccess/$1 [L]
    >Se hai voglia di documentarti, inizia da qui:
    >http://httpd.apache.org/docs/2.2/rewrite/

    Ti ringrazio veramente tantissimo
    Ciao

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.