2011-08-19 5 views
2

J'ai actuellement un fichier assez en avant modrewrite droite qui mappe urls différentes pages php avec possibles des variables GET:règle globale à appliquer à toutes les règles actuelles

RewriteRule ^grant$ about.php?p=4 [L] 
RewriteRule ^contact-people-([A-za-z0-9-]+)$ about.php?p=5&to=$1 [L] 
RewriteRule ^([a-z0-9-]+)-media$ media-gallery-element.php?prettyid=$1 [L] 
#etc .... it goes on for perhaps 200 or so entries 

que je veux avoir une variable linguistique globale qui est dans l'URL et je me demande comment je peux ajuster intelligemment mon fichier modrewrite pour gérer cela. Je pouvais le faire en doublant mes entrées et il suffit d'ajouter des règles telles que le premier passe au-dessus changé:

RewriteRule ^grant$ about.php?p=4&lan=en [L] 
RewriteRule ^([a-z]+)/grant$ about.php?p=4&lan=$1 [L] 

La première ligne est la même et serait l'anglais par défaut (en), puis la deuxième rangée gère d'autres codes de langue, es, fr, de, etc. Donc je pourrais le faire de cette façon, mais il semble qu'il y ait une meilleure façon de le faire sans doubler mes entrées. Fondamentalement, je veux prendre TOUTES mes demandes, chercher un ([a-z] +)/au début de la requête uri, puis virer sur la requête comme une variable GET, lan.

Comment procéder intelligemment?

+0

Avez-vous fini liste des langues? –

+0

Eh bien j'utilise mod-rewrite dans Apache dans Linux, et php est ma langue de choix – Landon

+0

Pas de langages de programmation: Langues humaines. Comme "lan = xx" où xx est la langue. –

Répondre

2

Vous pouvez le faire facilement en définissant une variable d'environnement. Quelque chose comme ça devrait faire l'affaire:

# set default environmental variable for language 
RewriteRule .* - [E=language:en] 

# if two characters and slash lead, then 
RewriteCond %{REQUEST_URI} ^/([a-z]{2})/(.*)$  

# overwrite default environmental variable 
RewriteRule .* - [E=language:%1] 

# other rules 
RewriteRule ^grant$ about.php?p=4&lan=%{ENV:language} [L] 

Vous pouvez également accéder à la variable d'environnement directement en PHP, auquel cas vous pouvez ignorer l'inclure dans les règles de réécriture:

echo getenv('language'); 
echo $_SERVER['language']; 
echo $_SERVER['REDIRECT_language']; 
Questions connexes