根据扩展名和语言重定向域名

时间:2016-01-30 09:23:21

标签: php .htaccess redirect mod-rewrite

我正试图寻找多语言网站的解决方案。我有4个域名:

  • domain.com
  • domain.be
  • domain.nl
  • domain.uk

根据域名,必须加载适当的语言。语言由?lang = ...决定 我在.htaccess中尝试过modrewrite,但它不适合我的需要。当用户访问domain.com/page时,.htaccess不会处理规则。 所以我想用php来做。 目前,语言和cookie由这篇文章设置:

<?php
session_start();
header('Cache-control: private'); // IE 6 FIX

if(isSet($_GET['lang']))
{
$lang = $_GET['lang'];

// register the session and set the cookie
$_SESSION['lang'] = $lang;

setcookie('lang', $lang, time() + (3600 * 24 * 30));
}
else if(isSet($_SESSION['lang']))
{
$lang = $_SESSION['lang'];
}
else if(isSet($_COOKIE['lang']))
{
$lang = $_COOKIE['lang'];
}
else
{
$lang = 'en_eu';
}

switch ($lang) {
  case 'nl_be':
  $lang_file = 'nl_be.php';
  break;

  case 'nl_nl':
  $lang_file = 'nl_nl.php';
  break;

  case 'en_us':
  $lang_file = 'en_us.php';
  break;

  case 'en_uk':
  $lang_file = 'en_us.php';
  break;

  case 'en_eu':
  $lang_file = 'en_eu.php';
  break;

  default:
  $lang_file = 'en_eu.php';

}

include_once 'components/languages/'.$lang_file;
?>

我正在考虑添加一些行来确定域名,并添加一些if语句来根据域确定语言。但我真的不知道如何以及如果这是正确的做法。

<?php
$url =  "//{$_SERVER['HTTP_HOST']}";

if ($url == domain.be) {
    $lang = 'nl_be';
}
elseif ($url == domain.uk) {
    $lang = 'en_uk';
}
else ( ) {
    $lang = 'en_us';
}
?>

2 个答案:

答案 0 :(得分:1)

阅读本文后:https://support.google.com/webmasters/answer/182192?hl=en

Google建议在自己的网址上保留不同的语言版本。

由于您已经拥有顶级域名,我只需检查域名并确定其中的语言。

然后在每个页面的顶部为用户提供语言选择链接:

English: example.com/node/1
French:  example.fr/node/1
etc.

隐藏当前语言链接。

并使用头部中的链接元素补充上述内容:

<link rel="alternate" hreflang="es" href="http://example.es/node/1" />

答案 1 :(得分:0)

我在这个帖子How to default to another language based on domain

中找到了答案

它在.htaccess中使用SetEnvIf,php处理其余的

.htaccess中的

代码:

SetEnvIf Host "\.be$" SITE_LANGUAGE=nl_be
SetEnvIf Host "\.uk$" SITE_LANGUAGE=en_uk

然后使用:

调用SITE_LANGUAGE
$_SERVER['SITE_LANGUAGE'];
PHP中的

代码:

<?php
session_start();
header('Cache-control: private'); // IE 6 FIX

$lang = $_SERVER['SITE_LANGUAGE'];

if(isSet($_GET['lang']))
{
$lang = $_GET['lang'];

// register the session and set the cookie
$_SESSION['lang'] = $lang;

setcookie('lang', $lang, time() + (3600 * 24 * 30));
}
else if(isSet($_SESSION['lang']))
{
$lang = $_SESSION['lang'];
}
else if(isSet($_COOKIE['lang']))
{
$lang = $_COOKIE['lang'];
}
else
{
$lang = 'en_eu';
}

switch ($lang) {
  case 'nl_be':
  $lang_file = 'nl_be.php';
  break;

  case 'nl_nl':
  $lang_file = 'nl_nl.php';
  break;

  case 'en_us':
  $lang_file = 'en_us.php';
  break;

  case 'en_uk':
  $lang_file = 'en_us.php';
  break;

  case 'en_eu':
  $lang_file = 'en_eu.php';
  break;

  default:
  $lang_file = 'en_eu.php';

}

include_once 'components/languages/'.$lang_file;
?>