我想将页面重定向到:http://www.mysite.com/index.php?id=1
到http://www.mysite.com/the-real-name.htm
但我在第一个网址中没有实名,那么我应该从db获取它。
我创建了一个界面页面,然后我将页面http://www.mysite.com/index.php?id=1
重定向到它,我从db中获取了实名(在url中使用id参数),然后使用PHP Header函数将页面重定向到http://www.mysite.com/the-real-name.htm
此流程搜索引擎是否友好?
哪个网页将使用搜索引擎抓取工具编入索引?界面页面或http://www.mysite.com/the-real-name.htm
?
哪种索引是http://www.mysite.com/the-real-name.htm
的最佳解决方案?
非常感谢
答案 0 :(得分:2)
如果您想告诉搜索引擎最终的网址是“网址”,您需要执行永久重定向。 HTTP状态代码为301
。
header('Location: http://www.mysite.com/the-real-name.htm', true, 301);
对于第一次重定向,您需要执行临时重定向。 HTTP状态代码为302
。
header('Location: http://www.mysite.com/index.php?id=1', true, 302);
请记住,不仅要为重定向发送标头,而且还要发送新的位置所在的人类可读信息的HTTP / HTML BODY,这是一种很好的做法。预计重定向不会由客户自动执行。
根据您使用的系统,使用PHP设置HTTP状态标头可能会有所不同。上面的代码适用于正常运行的PHP版本。坚持最新。但是,如果你不能和服务器集成中断,你可能会稍微推动一下限制并强行推进:
# Manually sending the HTTP 1/1 status line header - PHP does this nowadays, so normally not needed. But if you need it, ensure it's the first header you send.
header ('HTTP/1.1 301 Moved Permanently');
# Same here, but some CGI/FCGI+PHP implementations require you to set the Status header as well manually. Normally not needed.
header ('Status: 301');
# Set the Location header and status: (you will always need this)
header ('Location: http://www.mysite.com/the-real-name.htm', true, 301);
请务必使用能够显示不自动执行重定向的响应标头的工具(例如curl)来检查脚本是否发送了正确的标头:
$ curl -i "http://www.mysite.com/index.php?id=1"
否则,等待谷歌反映更改只需要你知道你犯了一些错误需要一点时间。
答案 1 :(得分:1)
当重定向时也设置301标题,搜索引擎将知道从那里开始的内容。
header ('HTTP/1.1 301 Moved Permanently');
header ('Location: '.$location);
答案 2 :(得分:1)
如果关系无法更改,请使用永久重定向as hakre suggested(301状态代码)。否则,如果相同的id
值可能指向将来的其他位置,请使用临时重定向。
在任何一种情况下,如果规范(官方,主要,主要)网址为“http://www.mysite.com/the-real-name.htm”,您可以告诉搜索引擎在页面的head
部分中使用canonical meta tag:
<link rel="canonical" href="http://www.mysite.com/the-real-name.htm" />