根据首选语言(Accept-Language)redirect.htaccess

当用户请求/ ,我想redirect/en/de ,这取决于他们在HTTP请求头Accept-Language指定的首选项。

我想这是服务器端脚本很容易,但我需要一个.htaccess解决scheme,因为它必须为静态网站工作。

我试过的:

有这个解决scheme吗?

不pipe是以某种方式使内容协商redirect,还是允许在RewriteCond指令中检查/比较质量值,或者完全不同的东西。

一些想法:

如果您有权访问服务器configuration,可能有一种方法:在您的服务器configuration中使用RewriteMap指令。

然后,您可以将Accept-Language头文件发送到Perl或其他任何脚本,这些脚本将以301的forms发回可以在您的RewriteRule中使用的首选语言。

如果您有权访问php语言,则可以使用“ / ”中的index.php文件发送带有函数header('Location: /en/static-pages.html')的redirect。 从PHP 5.3还有一个函数locale_accept_from_http() ,它locale_accept_from_http()返回首选的语言环境。

但重要的是:您希望用户"get their preferred language" 。 你确定这个技巧能让用户得到它的首选语言吗? 所以很多人不会在他们的浏览器偏好中设置它。 自动语言select应该(必须)与用户select的记忆(cookie)相结合,用户的select应该(必须)优先于自动select。

免责声明:我没有testing过这个。 我在过去使用类似于这种types的逻辑,使用mod_alias来设置variables,并让mod_rewrite处理多个条件。 在Apache 2.4中使用If语句变得更容易。

 RewriteEngine On SetEnvIf Request_URI ^/$ toplevel SetEnvIf Accept-Language 'fr' lang_french RewriteCond %{ENV:toplevel} 1 RewriteCond %{ENV:lang_french} 1 RewriteRule ^ /fr [R=302,L] 

我应该补充说这个例子是使用apacheconfiguration而不是.htaccess。 我记得在.htaccess中有一些关于mod_rewrite的警告,但是由于延迟惩罚,我从不使用它。 祝你好运!