首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过MultiViews进行的语言选择仅在请求其他资源时部分工作。

通过MultiViews进行的语言选择仅在请求其他资源时部分工作。
EN

Stack Overflow用户
提问于 2011-11-13 13:33:29
回答 1查看 362关注 0票数 1

我有一个以不同语言提供的小站点,这些语言是根据以下标准选择的(增加优先顺序):

  1. Accept-Language由浏览器
  2. 发送cookie指定首选语言
  3. 请求路径在

末端包含语言首选项

网站本身只包含静态HTML页面,我希望尽可能保持这种状态。我通过mod_negotiationmod_rewrite和以下.htaccess文件实现了语言选择(缩短为省略语言和字符集的声明):

代码语言:javascript
复制
Options FollowSymLinks MultiViews
DirectoryIndex index

Header set Pragma no-cache

RewriteEngine on
RewriteRule ^([a-zA-Z-]{2,5})$ index [CO=language:$1:.example.com:525600,E=LANG:$1]

SetEnvIf Cookie "language=([a-zA-Z-]+)" COOKIE_LANG=$1

SetEnvIf COOKIE_LANG (.+) prefer-language=$1
SetEnvIf REDIRECT_LANG (.+) prefer-language=$1

# plenty of AddLanguage and AddCharset calls

LanguagePriority en-us
DefaultLanguage en-us
ForceLanguagePriority Prefer Fallback

该机构自8月左右以来一直运作良好,以便能够做到以下几点:

MultiViews)

  • Cookie

  • No,Accept-Language接管(感谢 present,该cookie的语言将使用/es或类似的
  1. 请求路径,用于(a)设置cookie和(b)将prefer-language设置为该值。

现在,我在站点上有了更多的资源,多亏了MultiViews,可以通过/resource而不是/resource.html和内容协商来选择这些资源,cookie选项对于选择合适的语言仍然很好。

现在,我希望扩展URI处理,以便像/resource/en这样的东西可以直接选择特定语言中的资源,这样就不仅适用于/了。我尝试了下面的RewriteRule

代码语言:javascript
复制
RewriteRule ^(([^/]+)/)?([a-zA-Z-]{2,5})$ /$2 [CO=language:$3:.example.com:525600,E=LANG:$3]

而且,发送正确的资源和设置正确的cookie是有效的,但是首选语言显然不再从环境变量中提取。现在唯一强迫语言选择的是cookie,但是在这个请求上,这仍然是相同的,所以在刷新页面之前我不会看到新的语言。到目前为止,我对这些规则所做的任何尝试都没有对这种行为产生影响。有趣的是,有了这条规则,上面记录的旧行为仍然有效。只有当我请求与/不同的东西时,它才会做一些奇怪的事情。

这是在共享主机上(在FreeBSD监狱中),因此我无法启用重写日志(因为我甚至不知道文件所在的物理路径);此外,它显然忽略了环境变量,而且出于某种原因只使用cookie设置首选语言。到目前为止我还不知道为什么。有什么帮助吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-14 02:22:19

我现在通过在RewriteRuleSetEnvIf之间混合语言选择来解决这个问题。

代码语言:javascript
复制
SetEnvIf Cookie "language=([a-zA-Z-]+)" prefer-language=$1
SetEnvIf REDIRECT_prefer-language "(.+)" prefer-language=$1
SetEnvIf Request_URI "/([a-zA-Z-]{2,5})$" prefer-language=$1

RewriteRule "^(([^/]+)/)?([a-zA-Z-]{2,5})$" /$2 [CO=language:$3:.example.com:525600]

规则现在只设置cookie并指向正确的资源,而语言选择则通过在请求URI上的匹配来处理。仍然感觉很奇怪,特别是当需要以REDIRECT_作为前缀时,很难看到它,但至少它现在起作用了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8111891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档