SEO友好的URL在我的语言选择器中

时间:2015-08-20 11:45:49

标签: php .htaccess

我想更改网址,以便在我的语言选择器中使用SEO友好网址。

目前,如果我更改语言,网址就像这样

mydomain.com/index?lang=en

我希望它像

mydomain.com/index/en

无论我导航到哪个页面

,我希望它保持选择的语言

这是我的.htaccess重写规则

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z0-9]+)$ $1.php?lang=$2

这是我的初始化文件

<?php
$languages = array('en', 'ru');

$get_lang = Input::get('lang');

if(isset($get_lang) === true && in_array($get_lang, $languages) === true) {
    $_SESSION['lang'] = $get_lang;
} else if(isset($_SESSION['lang']) === false) {
    $_SESSION['lang'] = 'en';
}

include 'lang/' . $_SESSION['lang'] . '.php';
?>

这是我的HTML标记

<ul class="dropdown-menu">
    <li><a href="?lang=en"><img src="assets/images/flags/gb.png" width="16" height="11" alt="EN">ENGLISH</a></li>
    <li><a href="?lang=ru"><img src="assets/images/flags/ru.png" width="16" height="11" alt="RU">RUSSIAN</a></li>
</ul>

由于

1 个答案:

答案 0 :(得分:1)

您的RewriteRule不符合您的需求,因为它不捕获语言代码($ 2不存在)。对于您的网址结构,规则应如下所示:

RewriteRule ^([A-Za-z0-9]+)/([a-z]{2})$ $1.php?lang=$2

$1是页面名称,$2是语言代码。

如果要设置此网址结构,则还必须调整链接目标。基本上,您必须在每个$_SESSION['lang']的末尾添加href的内容。

从语言切换到另一种语言

  • 如果标头<base>标记中未设置基本网址,<a href="en">...</a><a href="./en">...</a>应该有效
  • 如果它不起作用,可能是因为在<base>标记中设置了基本网址。例如,基本网址设置为http://domain/,当您定位./th时,它将执行http://domain/th而不是http://domain/currentpage/th(而Apache可能会说th.php }不存在,du重写URL)。在这种情况下,您将要么删除基本标记,要么将其更改为包含页面路径。

痛苦的操作,如果你有很多链接,可以在每个href的末尾添加语言代码。一些思路:

  • http://domain/lang/page可以比http://domain/page/lang更容易设置,因为如果未设置基本标记或包含语言代码,则不必在每个语言代码中指定语言代码链接目标网址

  • 在JavaScript中添加href的代码语言,如果你设想它,不是一个选项,因为搜索引擎不会看到它

  • 取决于您的体系结构(内容是纯静态的吗?),可以更容易设置多个子域:例如,我们经常会看到http://lang.domain.com。但它可以稀释网站在搜索引擎中的排名,因为它不被视为一个独特的域名。

  • 定义生成href的PHP函数对于轻松更改URL的结构非常有用。我们经常看到PHP框架为其提供帮助。