我想更改网址,以便在我的语言选择器中使用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>
由于
答案 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框架为其提供帮助。