PHP5:如何检查&通过重定向301将预定义的规范URL设置为标题位置?

时间:2011-04-03 10:22:59

标签: php apache redirect

我遇到了一个我想要解决的重复内容的常见错误:
浏览器中的超链接显示:http://website.org/nl/amsterdam

现在,这不是规范网址,我希望将网页重定向到其已知的规范网址(条件是当前网页不是规范网页)

<?php $canonical = "http://website.org/nl/amsterdam-grass-is-greener;

  header("HTTP/1.1 301 Moved Permanently" );
  header("Status: 301 Moved Permanently" );
  header("Location: " . $canonical);  // shows below picture, while url looks good

  exit(0);

<html><head><link rel="canonical" href="<?=$canonical?></head>...</html>

主要问题:如何让这个工作?目前非规范网址似乎想要直接指向规范网址(通过HEAD信息测试),但一旦到达那里,PHP就会卡住并显示:

enter image description here

次要问题:这个想法对您来说听起来不错吗?由于搜索引擎不严格使用规范,只能将其用作提示,通常会保存错误的非规范网址。上述规则是否通过301重定向使搜索引擎在搜索结果中保存好的版本更强大?这是否也解决了我的重复内容网址问题?

2 个答案:

答案 0 :(得分:1)

尝试:

if(isset($canonical) && ('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] != $canonical)) {
  header ('HTTP/1.1 301 Moved Permanently');
  header('Location: ' . $canonical);
  exit();
}

要回答您更常见的问题,这不是一个可行的解决方案(除非您的网站非常小),因为它要求您对每个网页的规范网址进行硬编码。尽可能接近,您应该创建一个每个资源只有一个URI的URL结构。但是,它确实解决了搜索引擎感知重复内容的直接问题。

编辑:感谢Gumbo。

答案 1 :(得分:1)

似乎规范尝试重定向。
您必须使用一些HTTP嗅探器来查看按下某个按钮时实际发生的情况。让自己像LiveHTTPHeaders一样添加任何其他内容的Firefox附件,并查看重定向的内容。