我目前有一个非常简单的modrewrite文件,它将网址映射到具有可能的GET变量的不同php页面:
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]
第一行是相同的,默认为english(en),然后第二行处理其他语言代码,es,fr,de等等所以我可以这样做,但似乎有一个更好的方法来做到这一点,而不是加倍我的条目。基本上,我想接受我的所有请求,在请求uri的开头查找([a-z] +)/,然后将其作为GET变量lan发送到请求中。
我如何巧妙地做到这一点?
答案 0 :(得分: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'];