使用htaccess或php标头重定向大量URL

时间:2010-04-08 07:34:54

标签: php .htaccess redirect sitemap

我经历过一次重大的网站大修,现在有来自搜索引擎和外部网站的5,000多个传入链接,书签服务等导致死页或404错误。

许多页面都有相应的“永久链接”或已知的替换层次结构/ URL结构。

我已经开始使用htaccess或物理文件列出主要重定向,只有一个标题位置reidrect,这显然是不可持续的!

用htaccess,php header,mysql,sitemap文件列出所有旧链接地址及其相应的新地址的最佳方法是什么?或者更好的方法是让所有断开的链接等待搜索引擎等重新索引我的网站?

在重置链接之前,是否会对此临时期间的大量重定向文件产生任何影响?

3 个答案:

答案 0 :(得分:6)

为什么不以任何适当的格式(数据库或平面文件)使用此列表,并将其加载到404错误处理程序文件中?然后只搜索REQUEST_URI,并使用标题(位置:“)重定向

的.htaccess

ErrorDocument 404 /404.php

404.php

<?PHP
if ($newurl=db_lookup($_SERVER['REQUEST_URI'])) {
  header("Location: $newurl", 1, 301);
}

答案 1 :(得分:0)

标题重定向绝对不是正确的答案。如果你想保留你的SEO,你会想做301重定向。我不知道你的网站的路径结构是什么,但这应该可以使用一组聪明的mod_rewrite规则。如果不出意外,还有一大堆

Redirect 301 /old-path /new-path
使用脚本生成的

应该让你感到高兴。

对重定向有绝对的影响。如果您在0秒超时的情况下进行元刷新,Google会接受它作为真正的301重定向的适当替代,但其他人可能不会。如果您没有使用该特定方法,那么您将失去所有的链接。

答案 2 :(得分:0)

我最近做的是使用由传入URL中的某个模式触发的重写模块,从具有新.htaccess的文件夹中请求新地址,其中我将所有相关的URL分组。因此,我可以通过从我的数据库中转储相关的参数来生成并在适当的时候维护一个单独的文件。

举一个例子:

在我的网站根文件夹的.htaccess中,我有类似这样的内容:

RewriteRule ^resource/show/(.*)_([0-9]*)/ http://www.mysite.no/bulkredirect/dam2news/$2 [R=301,L]

然后,在文件夹bulkredirect/dam2news中,我添加了一个带有新重定向的新.htaccess文件,例如:

RewriteRule 1119$ http://www.mysite.no/index.php?id=843&tx_ttnews[tt_news]=2594 [R=301,L]

现在,关键在于使两个ID(在此示例中为1119和2594)匹配,而这是通过一个聪明的连接数据库查询完成的。您可能还需要找出符合您情况的正则表达式。但一般的想法是有一个单独的.htaccess文件,既可以避免主文件的混乱,也可以简化以后的维护(可能只是重复db查询并将其转储到那里)。