2010-07-07 2 views
0

J'ai un site multilangue et je suis en train de réécrire les URL avec un quelque chose de faux répertoire comme ceci:aide de réécriture d'URL pour un site multilangue avec .htaccess (Apache)

http://localhost/theSite/page.php?id=param&cat=param?lang=en,fr,es à http://localhost/theSite/(en|fr|es)/page/param/param

.htaccess 
Options +FollowSymLinks 
RewriteEngine on 
RewriteRule ^(fr|en|en)/(.*) $2.php?id=$1&cat=$2&lang=$3 [NL,QSA] 

Cela résout comme une erreur 404.

Toute aide sera appréciée.

Répondre

4
RewriteRule ^(en|fr|es)/(.*?)/(.*?)/(.*) $2.php?id=$3&cat=$4&lang=$1 [NC,QSA] 

Je suppose que vous vouliez dire NC (aucun cas), non NL. Vous avez fait référence à des groupes de capture qui n'existaient pas et ont répété $2.

+0

Merci pour votre aide, j'utilise quelque chose comme ceci: RewriteRule adsInDpt/fr/([0-9] +)/([0-9] +)/([a-zA-Z0-9 _-] +) \. html $ adsInDpt.php? Dpt = $ 1 & ad = $ 2 [QSA], cela signifie que je dois écrire cette règle pour chaque page? – jartaud

+0

Non, vous pouvez faire comme dans la règle dans cette réponse, il vous suffit de changer la place de '(en | fr | es)'. – Artefacto

+0

Merci encore, mais il est possible d'avoir un dossier virtuel par exemple (site/en/page) au début, mais quand on clique sur un lien (Español, Français) le dossier change en es ou en fr ?? – jartaud

2

Votre deuxième capture capturera tout jusqu'à la fin de l'URL. Il est donc possible que vous doubliez sur l'extension ou le mauvais répertoire.

Bien qu'il ne devrait pas affecter la redirection, vous n'avez pas une troisième capture, alors où est $3?

Regardez vos en-têtes et voyez où ils redirigent et commentent vraiment.