【问题标题】:SEO friendly URL's in my language selector我的语言选择器中的 SEO 友好 URL
【发布时间】:2015-08-20 11:45:49
【问题描述】:

我想更改 URL,以便它们在我的语言选择器中成为 SEO 友好的 URL。

目前,如果我更改语言,URL 看起来像这样

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>

谢谢

【问题讨论】:

  • 那么你的问题是什么?
  • 嗯,这就是我所拥有的,但它不起作用

标签: php .htaccess


【解决方案1】:

您的 RewriteRule 不符合您的需求,因为它没有捕获语言代码($2 不存在)。对于您的 URL 结构,规则应该是这样的:

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

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

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

从一种语言切换到另一种语言

  • 如果在标头&lt;base&gt; 标签中没有设置基本url,&lt;a href="en"&gt;...&lt;/a&gt;&lt;a href="./en"&gt;...&lt;/a&gt; 应该可以工作
  • 如果不起作用,可能是因为在&lt;base&gt; 标签中设置了一个基本网址。例如,如果基本 URL 集是 http://domain/,当您定位 ./th 时,它将执行 http://domain/th 而不是 http://domain/currentpage/th(并且 Apache 可能会说 th.php 不存在,由于 URL 重写) .在这种情况下,您必须删除基本标记,或者将其更改为包含页面路径。

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

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

  • 在 JavaScript 中的 href 中添加代码语言(如果您已经预想的话)不是一种选择,因为搜索引擎不会看到它

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

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

【讨论】:

  • 是的,但我得到的只是/th.php was not found on this server
  • 无论我导航到mydomain.com/index/en等的哪个页面,我都希望它停留在所选语言上
  • 我改进了我的答案。
猜你喜欢
  • 2012-04-04
  • 2011-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-11
  • 1970-01-01
相关资源
最近更新 更多