• User Attivo

    Rewrite di un sito Multilingua e default

    Salve a tutti!
    Ho sviluppato un sito multilingua in php, dopodiché ho creato il file .htaccess per riscrivere gli url in modo che fossero più friendly ai motori di ricerca e soprattutto in modo che gli url fossero riscritti nella lingua dell'utente.

    Questo è il mio .htaccess. /mt2/ è la cartella sul server in locale, sul remoto la rewrite base sarà "/" e le cond modificate di conseguenza.

    Options +FollowSymlinks
    RewriteEngine On
    RewriteBase /mt2/
    
    RewriteRule ^admin[/]?$ admin/login.php [L,NC]
    RewriteRule ^collaboratori[/]?$ collaboratori.php [L,NC]
    
    RewriteCond %{REQUEST_URI} !^/mt2/it/
    RewriteRule (.*) - [S=10]
    RewriteRule ^it/$ ?lang=it 
    RewriteRule ^it/contatti-e-sedi[/]?$ contatti.php?lang=it [L,NC,QSA]
    RewriteRule ^it/(.*)cerca[/]?$ cerca.php?lang=it [L,NC,QSA]
    RewriteRule ^it/macchine-utensili-usate[/]?$ usato.php?lang=it [L,NC,QSA]
    RewriteRule ^it/macchine-utensili-nuove[/]?$ nuovo.php?lang=it [L,NC,QSA]
    RewriteRule ^it/accessori-macchine-utensili[/]?$ accessori.php?lang=it [L,NC,QSA]
    RewriteRule ^it/(macchine-utensili-usate|macchine-utensili-nuove|accessori-macchine-utensili)?[/]?([a-zA-Z-]+)$ categoria.php?categoria=$1&cat=$2&lang=it [L,NC]
    RewriteRule ^it/(macchine-utensili-usate|macchine-utensili-nuove|accessori-macchine-utensili)/([0-9]+)/([^/]+)-w00\.htm$ scheda_articolo.php?id=$2&web=1&lang=it [L,NC]
    RewriteRule ^it/(macchine-utensili-usate|macchine-utensili-nuove|accessori-macchine-utensili)/([0-9]+)/([^/]+)\.htm$ scheda_articolo.php?id=$2&web=0&lang=it [L,NC]
    RewriteRule ^it/(macchine-utensili-usate|macchine-utensili-nuove|accessori-macchine-utensili)/([0-9]+)/richiesta-informazioni\.php$ richiesta-informazioni.php?id=$2&lang=it [QSA,L,NC]
    
    RewriteCond %{REQUEST_URI} !^/mt2/en/
    RewriteRule (.*) - [S=10]
    RewriteRule ^en/$ ?lang=en [L,NC]
    RewriteRule ^en/contacts-and-offices[/]?$ contatti.php?lang=en [L,NC,QSA]
    RewriteRule ^en/(.*)search[/]?$ cerca.php?lang=en [L,NC,QSA]
    RewriteRule ^en/used-machine-tools[/]?$ usato.php?lang=en [L,NC,QSA]
    RewriteRule ^en/new-machine-tools[/]?$ nuovo.php?lang=en [L,NC,QSA]
    RewriteRule ^en/machine-tools-accessories[/]?$ accessori.php?lang=en [L,NC,QSA]
    RewriteRule ^en/(used-machine-tools|new-machine-tools|machine-tools-accessories)?[/]?([a-zA-Z-]+)$ categoria.php?categoria=$1&cat=$2&lang=en [L,NC]
    RewriteRule ^en/(used-machine-tools|new-machine-tools|machine-tools-accessories)/([0-9]+)/([^/]+)-w00\.htm$ scheda_articolo.php?id=$2&web=1&lang=en [L,NC]
    RewriteRule ^en/(used-machine-tools|new-machine-tools|machine-tools-accessories)/([0-9]+)/([^/]+)\.htm$ scheda_articolo.php?id=$2&web=0&lang=en [L,NC]
    RewriteRule ^en/(used-machine-tools|new-machine-tools|machine-tools-accessories)/([0-9]+)/richiesta-informazioni\.php$ richiesta-informazioni.php?id=$2&lang=en [QSA,L,NC]
    
    RewriteRule ^(.+)/files/(.+)$ files/$2 [L,NC]
    RewriteRule ^(.+)/style/(.+)$ style/$2 [L,NC]
    RewriteRule ^(.+)/lightbox/(.+)$ lightbox/$2 [L,NC]
    RewriteRule ^(.+)/js/(.+) js/$2 [L,NC]
    

    Il file è molto lungo (se avete idee per semplificare sono ben accette), ma funziona benone...
    Ora però ho bisogno di fare in modo che l'italiano sia il default, ovvero di un redirect (visibile) da www . sito . it a www . sito .it/it/ .
    Se poi il redirect valesse anche per le pagine interne sarei ancora più felice... 😉

    Praticamente ne ho provate di tutti i colori da stamattina, ma ottengo sempre un loop tra l'inserimento della directory fittizia (it,en,ecc) e il redirect al file reale.
    Per fare un esempio ecco una delle ultime prove:
    ho inserito nel .htaccess (prima all'inizio, poi alla fine, non è cambiato nulla)

    RewriteCond %{REQUEST_URI} !^/mt2/(it|en)/
    RewriteRule (.*) it/$1 [R=301]
    

    richiedo al browser -> localhost / mt2 /
    ottengo un redirect 301 a -> localhost /mt2 / it
    che fa un redirect 301 a -> localhost / mt2 / it /?lang=it
    che fa un redirect 301 a se stesso e quindi procede all'infinito finché apache non interviene

    Che un qualche santo mi aiuti! :arrabbiato:
    Grazie!! 🙂