在今年,我写了一个非常大的网站,没有CMS。我白手起家写的。今天,我开始实施一个翻译系统。
这个想法基本上是在URL中添加/language/。这意味着,当我在默认语言上浏览时,索引页是否具有url
http://www.racebooking.net/index.php一旦用户单击英文标志以查看网站的英文版本,URL将变成
http://www.racebooking.net/en/index.php在.htaccess中,我有一个将/en/转换为?lang=en的规则。
问题
每个页面都有大量的链接,这意味着我的网站上有成千上万的<a href=".."></a>标签。
例如,在我的index.php页面上,我有一个类似于此的链接
<a href="http://www.racebooking.net/forum">Forum</a>如果我正在浏览英文版本,应该指向
http://www.racebooking.net/en/forum乍一看,这个想法是把它改成
<a href="http://www.racebooking.net/<?php echo $_GET['lang'] . '/';?>forum">Forum</a>效果很好!但是,问题是我的网站上有成千上万的<a>标签!改变它们都是完全疯狂的,因为在它们中添加了<?php echo $_GET['lang'] . '/';?>!这需要一天又一天的工作。
那么,是否有一种聪明的方式将/language/添加到我所有的网站URLS中?
编辑
我宁愿不使用任何js。所有禁用js的用户在浏览我的网站时都会遇到问题!
发布于 2013-12-07 20:43:57
HTTP永久重定向状态代码(301)完全适合你的情况。所有链接到您的网站将仍然工作,此外,任何书签将更新到您的新网址路径构造。
您可以使用mod_rewrite在Apache中设置它:
RewriteRule /(?!en|es|de|fr|it)(/?.*)$ http://www.mydomain.com/en/$1 [R=301,L]这将重定向每个url路径,它不以en、es、de、fr、it开始到en (默认)子路径。
编辑评论:
上面的解决方案将使您的所有链接(旧的和新的)都能工作。
如果您还想更改页面上的所有链接,以便搜索引擎能够看到它们,那么您唯一的选择是在PHP/HTML代码中重写它们(为此使用JavaScript是个坏主意,原因很多)。
在这种情况下,最好的选择是编写一个助手函数,它根据当前语言为您生成链接。这样你将有一个单一的点,在那里你可以改变你的链接,如果他们再次改变在未来。
不幸的是,你不能一次改变你所有的链接。如果你有成千上万的,没有共同的代码来生成所有的,那么你必须一个一个地去做。好消息是,您并不是第一个遇到这个问题的人,专业IDE的开发人员已经实现了帮助您的工具。我个人选择的是一个商业软件,但其他开源IDE也有相当好的查找/替换选项。例如,您可以编写一个regex,它将找到您的链接并按照您提供的规则相应地替换它们。编写一个好的regex替换程序可能被证明是非常有益的,而不是一个一个地检查所有的链接。
这是url助手可能的实现之一:
class UrlHelper
{
public static function make($base, $lang = null)
{
if ( $lang === null ) {
$lang = 'en';
if ( isset($_GET['lang']) ) {
$lang = $_GET['lang'];
}
}
$url = "http://www.racebooking.net/{$lang}/{$base}";
return $url;
}
}现在,您必须找到输出链接的所有地方,并使用助手:
<a href="<?php echo UrlHelper::make('/old/url'); ?>">Link</a>请注意,这只是它如何工作的一个例子。实际上,我不建议将助手实现为静态方法,因为静态是纯粹的邪恶。对于真正的实现,您可以考虑使用帮助器对象而不是帮助器方法。
发布于 2013-12-07 20:42:11
编写一个小型Java程序(或您最喜欢的任何其他语言),对所有网站文件和更改进行迭代:
<a href="http://www.racebooking.net/ ...>在……里面
<a href="http://www.racebooking.net/<?php echo $_GET['lang'] . '/';?>或者使用jQuery并在每个页面中包含这样的函数:
$('a').click(function () {
var oldhref = $(this).attr('href');
// change href string here, e.g. insert /language/
$(this).attr('href', newhref);
});此函数将更改页面上每个锚标记的href。
发布于 2013-12-07 20:49:50
请注意,这仅仅是一个idea...someone可以改进这个答案:
您可以使用jquery修改客户端的链接。因此,您将有一个JS函数来使用jquery在现有标记上重建urls。您只需将变量发送到每个页面顶部的JS。我假设您在每个页面上都有某种包含函数,所以在不修改每个页面的情况下添加一些代码。
(没有测试)..。
//top of page
var lang = <?php echo $lang?>; //this is the language
//this function takes a url and adds a language variable to the end
function updateurl(url) {
url = url + '?lang=' + lang;
}
//this loops through each anchor on the page and adds the language to the querystring
$( "a" ).each(function( index ) {
jquery(this).attr('href') = update(jQuery(this).attr('href'))
});https://stackoverflow.com/questions/20446273
复制相似问题