Domanda URL path per sito multilingua

Warez

Utente Electrum
5 Novembre 2011
170
63
24
178
Salve, da un pochetto sto cercando di ottimizzare sempre di più le traduzioni per alcuni siti web che conosco, ultimamente ho deciso di provare sia la modalità che utilizza subdomains (it-it.miosito.com) che quella che usa subdirectories (miosito.com/it-it/), sto riscontrando alcuni problemi con quella delle subdirectories dato che non saprei proprio come muovermi e online è molto difficile trovare delle guide dettagliate, al momento la cosa più "vicina" è l'utilizzo di questo codice scritto da JunkCoder
 
Ti sconsiglio di usare i sottodomini a questo scopo, oltre ad essere piu' complessa la gestione dei DNS e' anche assai poco SEO-friendly e i motori di ricerca faranno piu' fatica ad indicizzare il tuo sito. Per quanto riguarda le subdirectories hai due possibilita':
  • Usare mod_rewrite(Apache, ma gli altri hanno sistemi per lo stesso scopo) per interpretare la richiesta /it-it/ come fosse stato richiesto index.php?lang=it-it, mentre l'utente non vede nulla.
    • Vantaggi: ti permette di gestire in modo dinamico le lingue, puoi fare il tutto con solo i due file .php e .htaccess
    • Svantaggio: gestione complessa se hai bisogno di altri parametri GET o "sottocartelle"
  • Creare N cartelle per N lingue, con N file index.php con dentro <?php define("LANG", "xx"); require "../common.php"; dove common controlla la lingua con defined e prosegue con l'interfaccia tradotta.
    • Vantaggio: funziona su qualunque webserver, anche su hosting free che non supportano l'URL rewrite
    • Svantaggi: innumerevoli file, soluzione "sporca", poco mantenibile e scalabile
Consiglio quindi l'URL rewrite e' sicuramente la scelta piu' elegante, inoltre puoi usare il codice che ti ho gia' suggerito, ti basta scrivere le regole per il rewrite.
 
  • Mi piace
Reazioni: Warez
Ti sconsiglio di usare i sottodomini a questo scopo, oltre ad essere piu' complessa la gestione dei DNS e' anche assai poco SEO-friendly e i motori di ricerca faranno piu' fatica ad indicizzare il tuo sito. Per quanto riguarda le subdirectories hai due possibilita':
  • Usare mod_rewrite(Apache, ma gli altri hanno sistemi per lo stesso scopo) per interpretare la richiesta /it-it/ come fosse stato richiesto index.php?lang=it-it, mentre l'utente non vede nulla.
    • Vantaggi: ti permette di gestire in modo dinamico le lingue, puoi fare il tutto con solo i due file .php e .htaccess
    • Svantaggio: gestione complessa se hai bisogno di altri parametri GET o "sottocartelle"
  • Creare N cartelleper N lingue, con N file index.php con dentro <?php define("LANG", "xx"); require "../common.php"; dove common controlla la lingua con defined e prosegue con l'interfaccia tradotta.
    • Vantaggio: funziona su qualunque webserver, anche su hosting free che non supportano l'URL rewrite
    • Svantaggi: innumerevoli file, soluzione "sporca", poco mantenibile e scalabile
Consiglio quindi l'URL rewrite e' sicuramente la scelta piu' elegante, inoltre puoi usare il codice che ti ho gia' suggerito, ti basta scrivere le regole per il rewrite.
Ho provato a scrivere questo pezzettino di codice ma ho dei problemi per quando uso uno slash di chiusura, nel caso di www.miosito.com/it, tutto funziona alla perfezione, ma nel caso io usassi www.miosito.com/it/ ottengo pagine completamente buggate

Codice:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php


RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.+)$ ?lang=$1 [QSA,L]

E comunque ti ringrazio per la risposta super dettagliata
 
Le pagine sono buggate perche' se il browser vede "importa ciao.js, background.jpg, style.css" e sei in /it allora cerca /ciao.js, /style.css, ma se sei in /it/ allora li cerca in /it/style.css ecc... Quindi non li trova e spesso risulta in layout distrutto. Una volta capito questo hai diversi modi di risolvere, puoi inserire altre regole da rewrite per i file jpg, css, js, in poche parole tutto cio' che non sia php oppure puoi caricare le risorse esplicitamente con lo slash iniziale, tipo <img src="/background.jpg" /> in modo che sia indifferente l'annidamento delle cartelle. Se invece non ti va di fare una di queste cose puoi sempre rilevare lo slash finale da php e fare un redirect per toglierlo.
 
  • Mi piace
Reazioni: Warez