我正在尝试在apache服务器上的VHost中设置语言环境变量,以便请求的路径将定义使用的语言环境。 要求是使用更“消费者友好”的区域代码,而不是ISO格式 - 但我们需要将它们映射到框架中支持的ISO格式。
例如:
http://site.com/uk/path/to/page.html
会将环境变量设置为REQ_LOCALE=en_GB
如果找到意外的语言环境,我们希望将其默认为美国英语。
我现在尝试使用的是这种方式的apache SetEnvIfNoCase
指令:
SetEnvIfNoCase Request_URI ^/eu REQ_LOCALE=en_US
SetEnvIfNoCase Request_URI ^/es REQ_LOCALE=es_ES
SetEnvIfNoCase Request_URI ^/de REQ_LOCALE=de_DE
SetEnvIfNoCase Request_URI ^/fr REQ_LOCALE=fr_FR
SetEnvIfNoCase Request_URI ^/it REQ_LOCALE=it_IT
SetEnvIfNoCase Request_URI ^/uk REQ_LOCALE=en_GB
SetEnvIf REQ_LOCALE ^$ REQ_LOCALE=en_US
由于某种原因,只调用最后一个指令。但是,如果我从正则表达式中移除^/
,则de
。
所以......我现在有点不知所措:)
有人可以帮忙吗?
(注意:我尝试使用REQUEST_URI
以及Request_URI
- 结果没有变化)
修改 我认为以下重写规则可能导致我的问题:
RewriteRule .* index.php [L]
查看重写代码 - 似乎这会导致重定向,并且环境变量未被传输。 所以......
答案 0 :(得分:1)
像这样使用:
# initialize the env var to en_US
SetEnvIfNoCase Request_URI "^" REQ_LOCALE=en_US
# now set it conditionally
SetEnvIfNoCase Request_URI "^/eu" REQ_LOCALE=en_US
SetEnvIfNoCase Request_URI "^/es" REQ_LOCALE=es_ES
SetEnvIfNoCase Request_URI "^/de" REQ_LOCALE=de_DE
SetEnvIfNoCase Request_URI "^/fr" REQ_LOCALE=fr_FR
SetEnvIfNoCase Request_URI "^/it" REQ_LOCALE=it_IT
SetEnvIfNoCase Request_URI "^/uk" REQ_LOCALE=en_GB
编辑:您可以将重写规则更改为:
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^ index.php?lc=%{ENV:REQ_LOCALE} [L,QSA]