对于大量页面单独进行301重定向的最佳方法是什么?

时间:2011-09-19 00:13:40

标签: php redirect

任何建议,我有大约300页需要设置301重定向到我的新域。任何人都可以解释如何以编程方式执行此操作,我真的希望不必单独完成!!!

我在CentOS 5.4上运行Apache服务器

旧页面 - >

http://example.com/examplePage.php?id=289

新页面 - >

http://gallery.example.com/en-US/theme/6

此问题是旧域无论如何都与新域无关。 2个具有完全不同ID值的独立数据库。这是对id值未保持同步的网站的彻底检查。我认为这是我的问题成为我需要保持SEO值完整的每个重定向的手动输入的地方。

如果有人可以建议如何在PHP中以编程方式进行,那将是很好的,否则我担心我的.htaccess文件中会有数百个条目。

2 个答案:

答案 0 :(得分:1)

尝试使用网址重写将所有网页重定向到同一301页面。 Url重写在每台服务器上的工作方式不同。对于Apache,您有mod_rewrite

答案 1 :(得分:1)

从您的问题来看,很难给出具体的答案,但我之前已经遇到过几十次你的情况,这就是我的建议:

正如Dani所说,使用Apache mod_rewrite来处理重定向,如果可以将它们放在站点根目录下的.htaccess文件中。

如果您只是更改域名,但所有页面网址都保持不变,那么您的.htaccess文件中只需要一行:

RewriteRule (.*) http://www.newdomain.com/$1 [R=301,L]

但是,如果您的页面网址正在更改,您可以使用Apache单独重定向它们。 Apache中典型的301重定向如下所示:

redirect 301 /oldpage.htm /newpage.htm

如果由于某种原因你无法使用Apache来处理重定向,你可以使用PHP这样做:

$redirects = array(
    '/old-page' => '/new-page',
    '/old-page-two.htm' => '/new-page-two'
);
if (array_key_exists($_SERVER["REQUEST_URI"],$redirects)) {
    header("Status: 301 Moved Permanently");
    header("Location:http://".$_SERVER["HTTP_HOST"].$redirects[$_SERVER["REQUEST_URI"]]);
    exit;
}

减少创建重定向的努力的唯一方法是,如果您尝试重定向的网址中存在常见模式,例如

/product/123    /product-123.html
/product/456    /product-456.html
/product/789    /product-789.html

如果是这种情况,那么您可以使用正则表达式来匹配这样的模式:

RewriteRule ^product/([0-9]*)$ /product-$1.html [R=301,L]

如果您告诉我们更多有关您的情况并提供一些示例网址,我们可以提供进一步的帮助。