- Home
- Categorie
- La Community Connect.gt
- News Ufficiali da Connect.gt
- mod rewrite per sito multilingua
-
mod rewrite per sito multilingua
Ciao a tutti,
sto facendo un sito multilingua e vorrei gestirlo in maniera google friendly.
La lingua di default è italiano.
Io vorrei fare in modo che quando accedo si trovi direttamente
www.example.it
cliccando sul cambio della lingua in inglese dovrebbe andare su
www.example.it/en/
però vorrei che tutti i file rimanessero unici in modo da non doverli duplicare.
Come posso fare?Queste regole le ho già inserite nel mio htaccess per gestire le pagine normalmente
RewriteEngine On RewriteBase / RewriteRule ^([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)\.html$ itinerari.php?&categoria=$1&sottocategoria=$2&pagina=$3 RewriteRule ^([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+).$ itinerari.php?&categoria=$1&sottocategoria=$2 RewriteRule ^([a-zA-Z0-9-]+).$ itinerari.php?&categoria=$1
-
Prova così:
RewriteEngine On RewriteBase / RewriteRule ^([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)\.html$ itinerari.php?&categoria=$1&sottocategoria=$2&pagina=$3 RewriteRule ^([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+).$ itinerari.php?&categoria=$1&sottocategoria=$2 RewriteRule ^([a-zA-Z0-9-]+).$ itinerari.php?&categoria=$1 RewriteRule ^en/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)\.html$ itinerari.php?&categoria=$1&sottocategoria=$2&pagina=$3 RewriteRule ^en/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+).$ itinerari.php?&categoria=$1&sottocategoria=$2 RewriteRule ^en/([a-zA-Z0-9-]+).$ itinerari.php?&categoria=$1
-
Perfetto, grazie funziona!
Avevo trovato anche questa soluzioneRewriteRule ^fr/(.*)$ /$1 [QSA,L] RewriteRule ^en/(.*)$ /$1 [QSA,L] RewriteRule ^de/(.*)$ /$1 [QSA,L]
posso chiederti cosa cambia?
-
@pettedemon said:
Perfetto, grazie funziona!
Avevo trovato anche questa soluzione> RewriteRule ^fr/(.*)$ /$1 [QSA,L] RewriteRule ^en/(.*)$ /$1 [QSA,L] RewriteRule ^de/(.*)$ /$1 [QSA,L] >```posso chiederti cosa cambia? Praticamente niente. Sicuramente quest'ultima è più mantenibile in caso di modifiche e/o aggiunte. Teoricamente fa puntare le pagine della lingua alle pagine a monte che a loro volta puntano alle regole da te definite (p.e.: itinerari.php? ...)
-
Ciao,
per problemi "tecnici" , mi sono un pò perso.
Ora considerando che tutte le mie pagine le voglio far caricare da database e che il mio sito è multilingua, come posso far gestire le lingue?La mia pagina sarà index.php?lang=it
e questa sarà quella di default ma devo dire che quando non trova parametri vada direttamente su www.sito.it ma devo anche indicare al get il parametro...
Poi per la lingua inglese ad esempio index.php?lang=en come lo posso gestire per farlo andare in www.sito.it/en ??
grazie!!!
-
@pettedemon said:
Ciao,
per problemi "tecnici" , mi sono un pò perso.
Ora considerando che tutte le mie pagine le voglio far caricare da database e che il mio sito è multilingua, come posso far gestire le lingue?La mia pagina sarà index.php?lang=it
e questa sarà quella di default ma devo dire che quando non trova parametri vada direttamente su www.sito.it ma devo anche indicare al get il parametro...
Perchè passare un ulteriore parametro? La lingua puoi procurartela dal dominio di primo livello
@pettedemon said:Poi per la lingua inglese ad esempio index.php?lang=en come lo posso gestire per farlo andare in www.sito.it/en ??
grazie!!!Se intendi redirect 301, cosi:
RewriteRule ^index.php?lang=(.*)$ www.sito.it/$1 [R=301]
-
Perchè praticamente devo selezionare il database in base alla lingua, ma essendo di default italiano volevo evitare che nella barra degli indirizzi si vedesse /it/ .
il massimo del percorso sarà www.miosito.it/en/camere/prezzi.html#camere
quindi devo prevedere di gestire più parametri, mentre come ti spiegavo prima per l'italiano volevo evitare si vedesse il /it/
si può fare?
Graziee!
-
l'indirizzo di partenza dovrebbe essere www.sito.it, mentre per le altre lingue sarà www.sito.it/en/
Mi son creato queste regole
[PHP]codice: RewriteEngine On
RewriteBase /RewriteRule ^([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+).html$ index.php?&lang=$1&pagina=$2 [QSA,L]
RewriteRule ^([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+).html$ pagina.php?&lang=$1&cartella=$2&pagina=$3 [QSA,L] [/PHP]questo mi gestisce le pagine www.sito.it/it/pagina.html e anche
www.sito.it/it/pagina/pagina.htmlvorrei però eliminare /it/ nel dominio italiano però mi serve come parametro per accedere al database dei contenuti in italiano.
Poi mi troverei anche col dover inserire una regola perchè la pagina /index.html venisse letta anche se digito solamente /
Qualche suggerimento??
-
Non so se ho capito bene
prova cosi:RewriteEngine On RewriteBase / RewriteRule ^en/([a-zA-Z0-9-]+).html$ /index2.php?lang=en [L, NC] RewriteRule ^fr/([a-zA-Z0-9-]+).html$ /index2.php?lang=fr [L, NC] RewriteRule ^([a-zA-Z0-9-]+).html$ /index2.php?lang=it [L, NC]
In pratica la prima e la seconda riga intercettano gli url del tipo /en/aaa.html e /fr/aaa.html.
In questo modo la terza regola ossia l'italiano viene eseguita se non sono eseguite le altre due
-
Perfetto!
Infatti se non c'è nulla mi prende in get il parametro it....
adesso se io volessi gestire altri parametri come nell'esempio che ti ho riportato?
-
Forse sto facendo un po di confusione però così sta funzionando
[HTML]RewriteRule ^en/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+).html$ /pagina.php?lang=en&cartella=$1&pagina=$2 [L,NC]
RewriteRule ^fr/([a-zA-Z0-9-]+).html$ /index.php?lang=fr [L,NC]
#RewriteRule ^([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+).html$ /index.php?lang=it&pagina=$1 [L,NC]
RewriteRule ^([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+).html$ /pagina.php?lang=it&cartella=$1&pagina=$2 [L,NC][/HTML]il problema si presenta quando io devo utilizzare una pagina nella root
quindi per la pagina www.sito.it/cartella/pagina.html funziona
ma se io devo usare www.sito.it/paginina.html come posso fare per fargli riconoscere?
-
RewriteRule ^/([a-zA-Z0-9-]+).html$ /pagina.php?lang=it&cartella=$1&pagina=$2 [L,NC]
-
Ciao, confermo che funziona tutto, magari può servire a qualcun altro
[PHP]
RewriteRule ^en/([a-zA-Z0-9-]+).html$ /index.php?lang=en [L,NC]
RewriteRule ^([a-zA-Z0-9-]+).html$ /index.php?lang=it [L,NC]
[/PHP]funziona:
digitando ww.sito.it/pagina.html recupero la variabile "it"
digitando ww.sito.it/en/pagina.html recupero la variabile "en"inserendo questo codice
[PHP]
RewriteRule ^en/([a-zA-Z0-9-]+).html$ /index.php?lang=en&pagina=$1 [L,NC]
RewriteRule ^en/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+).html$ /pagina.php?lang=en&cartella=$1&pagina=$2 [L,NC]
RewriteRule ^([a-zA-Z0-9-]+).html$ /index.php?lang=it&pagina=$1 [L,NC]
RewriteRule ^([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+).html$ /pagina.php?lang=it&cartella=$1&pagina=$2 [L,NC]
[/PHP]funziona:
digitando ww.sito.it/pagina.html recupero la variabile "it" e "pagina"
digitando www.sito.it/en/pagina.html recupero la variabile "en" e "pagina"digitando ww.sito.it/cartella/pagina.html recupero le variabili "it" - "cartella" - "pagina"
digitando ww.sito.it/en/cartella/pagina.html recupero le variabili "en" - "cartella" - "pagina"
-
Ora mi macherebbe solo una cosa...
se io digito ww.sito/index.html i recupera la variabile "it" - "index"Se invece io volessi eliminare la pagina index e fare in modo che digitando www.sito.it legga automaticamente index.html come di default e mi continui a recuperare le 2 variabili come posso fare?
Lo stesso mi servirebbe per se digito ww.sito.it/en/
Grazieeeeeee
-
@pettedemon said:
Ora mi macherebbe solo una cosa...
se io digito ww.sito/index.html i recupera la variabile "it" - "index"Se invece io volessi eliminare la pagina index e fare in modo che digitando www.sito.it legga automaticamente index.html come di default e mi continui a recuperare le 2 variabili come posso fare?
Lo stesso mi servirebbe per se digito ww.sito.it/en/
Grazieeeeeee
Prova cosi:
RewriteRule ^en/([^index]+).html$ /index.php?lang=en&pagina=$1 [L,NC] RewriteRule ^en/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+).html$ /pagina.php?lang=en&cartella=$1&pagina=$2 [L,NC] RewriteRule ^([^index]+).html$ /index.php?lang=it&pagina=$1 [L,NC] RewriteRule ^([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+).html$ /pagina.php?lang=it&cartella=$1&pagina=$2 [L,NC]