2

我正在尝试在 apache 服务器上的 VHost 中设置语言环境变量,以便请求的路径将定义使用的语言环境。要求是使用更“消费者友好”的语言环境代码,而不是 ISO 格式——但我们需要将它们映射到框架中支持的 ISO 格式。

例如: http://site.com/uk/path/to/page.html 将环境变量设置为REQ_LOCALE=en_GB

如果发现意外的语言环境,我们希望将其默认为美国英语。

我目前正在尝试以SetEnvIfNoCase这种方式使用 apache 指令:

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]

查看重写日志 - 似乎这导致了重定向并且环境变量没有被传递。所以...

4

1 回答 1

2

像这样使用它:

# 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]
于 2013-09-04T13:51:10.803 回答