-
aiuto rewriterule!
Ciao a tutti, volevo chiedervi un aiuto:
sto facendo un sito multilingua e vorrei usare le rewriterule per mascherare i parametri.
Le url sono del tipo
Codice:
www.sito.com/index.php?lang=it&page=home
e dovrebbe diventare così:
Codice:
www.sito.com/it/home
per ora sto usando questa regola:
Codice:
RewriteRule ^(([a-z]{2})/)?([a-zA-Z0-9_-]+)$ index.php?lang=$2&page=$3 [L]
funziona abbastanza, però se metto nella url questo:
mi prende "it" come parametro page e lang vuoto.
vorrei che scrivendo solo "www.sito.com" andasse alla versione default(inglese)
e scrivendo "www.sito.com/it" andasse alla versione italiana, quindi passasse lang=it e page vuoto
cioè in pratica se metto solo "/it" senza specificare altro dovrebbe andare alla home italiana, altrimenti va alla pagina specificata.
Come posso fare?
-
È sbagliata la regola.
In poche parole con (([a-z]{2})/)? dici che all'inizio della stringa possono esserci e non esserci (? quantificatore che indica 0 o 1 volta) 2 caratteri alfabetici; quindi ha 'priorità' la pagina.
Non è nulla di sicuro, ma dovresti provare ad aggiungere ? anche al secondo subpattern.
Prova così:
Codice:
RewriteRule ^(([a-z]{2})/?)?([a-zA-Z0-9_-]+)?$ index.php?lang=$2&page=$3 [L]
Facci sapere.
-
alla fine ho risolto così:
Codice:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule it/([a-z_-]+)? index.php?lang=it&page=$1 [L]
RewriteRule ^it$ /it/home [R]
# Default Page
RewriteRule ^([a-z_-]+)$ index.php?page=$1 [L]
</IfModule>
ora però ho un altro problema: se creo una cartella, ad esempio "test" e poi nel browser digito www.sito.com/test, mi appare la listing della directory anzichè la pagina test... come fare per fargli eseguire il rewrite anche se la cartella esiste fisicamente??