从现在起,主要讨论HTTP协议中的301状态代码的使用。可以用mod_rewrite或PHP来实现它。
当使用mod_rewrite时,除了必须定义一个重定向状态作为参数以外,重定向的实现与URL重写非常类拟。当初始请求为foo.php时,以下的规则用一个301重定向至bar.php。
RewriteRule ^foo\.php$ /bar.php [R=301,L]
除了未尾那个新的“R”选项以外,这里根本没有什么新东西——但是就是那个选项代表了一些重要的差异!其实无论有没有“R”选项,访问者最终都将明显地看到bar.php提供的内容,然而,当使用重定向时,用户的WEB客户端实际是向WEB服务器发出两个调用。首先请求foo.php;在响应的HTTP报头中得到一个301重定向代码,指定bar.php为新位置。然后WEB客户端请求bar.php,并通过更新显示在地址栏中的URL地址,告知用户加载了新的URL地址。
在PHP中,通过使用header()函数来添加HTTP报头,从而实现重定向.如果想把foot.php用301重定向至bar.php,foot.php将如下所示:
<?php
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://www.edo2008.com/bar.php');
?>
如果返回报中只有Location,但没有明确提到状态代码时,就意味着302临时重定向,请谨记于心。
实际应用中,如果在站点重新设计时需要改变URL地址,那么这个网站的管理员就至少应该将最重要的URL地址用301重定向至与它相对应的新地址。否则,链接价值将丢失。
使用一系列的301重定向可以减少这种问题。如果站点已被搜索引擎索引,就需要很有条理地把老的URL地址重写为新的URL地址。
使用重定向来改变文件名
把所有的动态URL地址重定向到它们的多关键词版本。从而即可以从动态URL地址,也可以从多关键词URL地址中得到相同的内容;以下的两个链接将得到相同的内容:
http://seophp.example.com/Products/SEO-Toolbox-C6/Link-Juice-P31.html
和
http://seophp.example.com/Product.php?category_id=6&product_id=31
为了避免任何可能从这两个链接产生的重复内容的问题,请确定如果访问者使用了动态的URL地址,都总是被重定向到正确的多关键词URL地址。对一个已有的网站,这样的URL地址在迁移过程中尤其重要,因为老的URL地址已被明确的索引过。