更改网站链接中的所有域名


Change all domains in links on a website

我需要一些关于如何解决一个丑陋的情况的建议。多年来,我们的论坛一直驻留在几个不同的域上。我们失去了一个5-6年前还在使用的域名,显然我们论坛上的一些帖子仍然有指向旧域名的链接。改变所有指向

的链接的最有效的方法是什么?

http://www.olddomain.com/stuff

指向

http://www.newdomain.com/stuff

唯一改变的部分是域名,url中的所有线程变量保持不变。这是最好用javascript/jquery在客户端完成的事情,还是应该在服务器端用PHP函数处理(不知道从哪里开始…)?一些伪代码,似乎不做什么我需要它在客户端…

$('a').each(function() {
   var domanin = 'newdomain';
   if(href.search('olddomain.com') != -1) {      
      $(this).attr('href', newdomain);
   }
});

谢谢

我认为如果在后端处理这个问题会更有意义。搜索引擎不会注意到您通过JavaScript所做的更改。

所以我建议你在数据库中搜索这些域名并替换它们

你应该在服务器端这样做,就像之前说的,但如果你不能因为任何原因,这里是你可以在javascript端做的事情。

$('a').each(function() {
  this.host = 'www.newdomain.com';
});

注意,这个例子使用的是jQuery,但是您也可以使用getElementsByTagName在纯javascript中做同样的事情。

要在JavaScript (w/jQuery)中做到这一点:

$('a').each(function() {
   var link = this.href;
   if(link.search('olddomain.com') != -1) {      
      this.href =  link.replace('olddomain.com', 'newdomain.com');
   }
});

这是一个jsfiddle: http://jsfiddle.net/tHXxK/

然而,我建议改变数据库中的链接,只是摆脱所有旧的引用。为此,创建一个脚本,搜索旧的url并替换它们,如:

$query = mysql_query("SELECT [id], [link] FROM [table] WHERE [link] LIKE '%//olddomain.com/%' OR [link] LIKE '%//www.olddomain.com/%'", $db) or trigger_erroR(mysql_error());
while ($row = mysql_query($query)) {
    $iQuery = mysql_query("UPDATE [table] SET [link]='" . mysql_real_escape_string(str_replace(array('//olddomain.com/', '//www.olddomain.com/'), array('//newdomain.com/', '//www.newdomain.com/'), $row['link']) . "' WHERE [id]=" . $row['id']), $db) or trigger_error(mysql_error());
}

如果是我,我会使用服务器端脚本将旧域的所有实例替换为新域,并一劳永逸地完成它。
我猜你的论坛DB是相当大的一个。为了节省系统资源,您可以编写一个多步骤脚本,分多个步骤完成该工作。
这是一种更好的方法,因为它也可以提高搜索引擎的数据一致性。