English 中文(简体)
• 如何根据与阿帕帕奇/摩德-摩托梅的接受——重新定向
原标题:How to redirect based on Accept-Language with Apache / mod_rewrite
  • 时间:2009-11-02 15:23:34
  •  标签:

对于语言转播,我们目前在包含指数的网络根体中设置了文件夹。 网址:<代码> HTTP_ACCEPT_LANGUAGE服务器变量。 e.g. for the url www.example.com/press/

/var/www/site/press/index.php>:

<?php
  if ($_SERVER["HTTP_ACCEPT_LANGUAGE"] == "en")
    header("location: ../press_en.php");
  else 
    header("location: ../press_de.php");
?>

随着这个网站的扩大,我们现在有许多这样的夹子。 我试图通过将转头移至单一存取档案来清理:

RewriteEngine on

# Set the base path here
RewriteBase /path/to/site/

# The  Accept-Language  header starts with  en 
RewriteCond %{HTTP:Accept-Language} (^en) [NC]

# EN redirects
RewriteRule press(/?)$   press_en.php [L,R]

# DE redirects (for all languages not EN)
RewriteRule press(/?)$   press_de.php [L,R]

这一概念与Sphp的档案相同,但它没有工作。 我已尝试过所有可能的语文环境,即“德国”偏好,检查负责人是正确的,但总是在<代码>press_de.php文档中服务。

我做了什么错了,还是有更好的办法? (不包括内容谈判/多观点或需要重新命名档案的任何内容,目前这不是一种选择)<>。

问题回答

我想将语言指标放在诸如<代码>/en/...或/de/...等URL道路的开头。 然后,你可以使用单一文字,通过预先确定语言指标来检查优先语言,重新引导请求:

// negotiate-language.php
$availableLanguages = array( en ,  de );
if (!preg_match( ~^/[a-z]{2}/~ , $_SERVER[ REQUEST_URI ])) {
    $preferedLanguage = someFunctionToDeterminThePreferedLanguage();
    if (in_array($preferedLanguage, $availableLanguages)) {
        header( Location: http://example.com/ .$preferedLanguage.$_SERVER[ REQUEST_URI ]);
    } else {
        // language negotiation failed!
        header($_SERVER[ SERVER_PROTOCOL ].  300 Multiple Choices , true, 300);
        // send a document with a list of the available language representations of REQUEST_URI
    }
    exit;
}

相应规则:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)$ negotiate-language.php [L]
RewriteRule ^([a-z]{2})/([^/]+)$ $2_$1.php [L]

请注意,您需要适当的<条码>,即Accept-Language Header field 不是单一价值,而是一份合格数值清单。 因此,可能不止一个价值,第一个价值并不总是更可取的价值。

提 交 人

RewriteEngine on
RewriteCond %{HTTP:Accept-Language} (en) [NC]
RewriteRule .* server.com/press_en.php [L]


RewriteCond %{HTTP:Accept-Language} (de) [NC]
RewriteRule .* server.com/press_de.php [L]




相关问题
热门标签