2011-08-19 54 views
2

我现在有一个非常简单的modrewrite文件,该文件将URL映射到不同的PHP页面有可能GET变量:全球规则适用于所有现有规则

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 

我想有一个全球性的语言变量,它是在网址中,我想知道如何巧妙地调整我的modrewrite文件来处理这个。我可以通过加倍我的项目做到这一点,只需添加更多的规则,使得第一个上面被更改为:

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

第一行是一样的,并会默认为英语(en),然后在第二行处理其他语言代码,es,fr,de等。所以我可以这样做,但似乎有更好的方法来做到这一点,而不会使我的条目翻倍。基本上,我想要接受我的所有请求,在请求uri的开头寻找([a-z] +)/,然后将它作为GET变量lan。

我该如何巧妙地做到这一点?

+0

你有一个有限语言列表? –

+0

嗯,我在Apache中使用mod-rewrite,而php是我选择的语言 – Landon

+0

不是编程语言:人类语言。像“lan = xx”,其中xx是语言。 –

回答

2

您可以通过设置环境变量轻松完成此操作。这样的事情应该做的伎俩:

# 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] 

您也可以直接访问环境变量在PHP中,在这种情况下,你可以跳过它包括在重写规则:

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