通知用户 301 重定向
Informing the user about a 301 redirect
考虑以下方案:
site A ------> site B (old URL) --- 301 redirect ---> site C (new URL)
事情是这样的
用户访问站点 A。站点 A 包含 link 到站点 B(旧 URL)。当用户单击 link 到站点 B 时,他将被重定向到站点 C(新 URL)。站点 B 发出到站点 C 的重定向。
问题
当用户最终到达站点 C 时,我想通知他重定向。
我试过的
- 在站点 C 中处理传入请求时,我曾尝试寻找
HTTP_REFERER
header,但引荐来源网址 URL 似乎指向站点 A。我期待它请参阅站点 B。我是否遗漏了与 301 重定向和此特定 header 的实施相关的内容?我知道它是由浏览器设置的,可能会出现意外行为,但为什么不能指望它指向站点 B(发出重定向的站点)?
- 在发出重定向时将
?redirected=1
查询字符串附加到新 URL 的末尾听起来像是一种解决方案,但它需要 a) 确保规范的 URL 到位以避免重复的内容和 b) 弄乱新的 URL,我想在地址栏内尽可能保持干净;
在 Javascript 或元刷新重定向发挥魔力之前,始终可以选择显示具有预定义超时的中间重定向页面,但我想避免这种方法并在新的网站,以避免混淆用户和网络爬虫,因为我读到 in-browser 重定向不如 server-side 重定向可靠。
解决这个问题的一般方法是什么?
更新: 从站点 B 重定向到 example.com/redirect.php?referrer_url=oldurl&redirect_to=newurl
怎么样?
然后 redirect.php
会将 oldurl
检测为推荐人 URL,将重定向消息闪现到 session 并发出 301 重定向到 example.com/newurl
.从 SEO 的角度来看,这是个好主意吗?
您可以使用重定向发送您自己的 http-header,例如:
header('RedirectedFrom: www.something.com/ifoo/bar.html');
并在目标站点使用它来识别重定向
$headers = headers_list();
foreach($headers as $header) {
list($name,$value) = explode(':',$header);
if($value == 'RedirectedFrom') {
// what ever you want to do
break;
}
}
我想出了以下解决问题的办法。
站点 B(旧 URL)被重定向到站点 C 的特定脚本,其工作是处理传入请求并在必要时执行重定向。
例如,如果用户浏览站点 A 并单击 link 到站点 B,他将被重定向到站点 C 的 redirect.php
脚本,该脚本接受两个 GET 参数:referrer_url
和 destination
。 referrer_url
是站点 B 的旧 link,destination
是站点 C 的相对路径。
脚本然后确保 destination
不是绝对的 URL(以避免大量重定向到其他站点),将其附加到站点 C 的基础 URL 并重定向用户到适当的页面。 referrer_url
不是必需的,但它可用于检测旧站点 B URL 的域(以防有多个不同的域)。
考虑以下方案:
site A ------> site B (old URL) --- 301 redirect ---> site C (new URL)
事情是这样的
用户访问站点 A。站点 A 包含 link 到站点 B(旧 URL)。当用户单击 link 到站点 B 时,他将被重定向到站点 C(新 URL)。站点 B 发出到站点 C 的重定向。
问题
当用户最终到达站点 C 时,我想通知他重定向。
我试过的
- 在站点 C 中处理传入请求时,我曾尝试寻找
HTTP_REFERER
header,但引荐来源网址 URL 似乎指向站点 A。我期待它请参阅站点 B。我是否遗漏了与 301 重定向和此特定 header 的实施相关的内容?我知道它是由浏览器设置的,可能会出现意外行为,但为什么不能指望它指向站点 B(发出重定向的站点)? - 在发出重定向时将
?redirected=1
查询字符串附加到新 URL 的末尾听起来像是一种解决方案,但它需要 a) 确保规范的 URL 到位以避免重复的内容和 b) 弄乱新的 URL,我想在地址栏内尽可能保持干净;
在 Javascript 或元刷新重定向发挥魔力之前,始终可以选择显示具有预定义超时的中间重定向页面,但我想避免这种方法并在新的网站,以避免混淆用户和网络爬虫,因为我读到 in-browser 重定向不如 server-side 重定向可靠。
解决这个问题的一般方法是什么?
更新: 从站点 B 重定向到 example.com/redirect.php?referrer_url=oldurl&redirect_to=newurl
怎么样?
然后 redirect.php
会将 oldurl
检测为推荐人 URL,将重定向消息闪现到 session 并发出 301 重定向到 example.com/newurl
.从 SEO 的角度来看,这是个好主意吗?
您可以使用重定向发送您自己的 http-header,例如:
header('RedirectedFrom: www.something.com/ifoo/bar.html');
并在目标站点使用它来识别重定向
$headers = headers_list();
foreach($headers as $header) {
list($name,$value) = explode(':',$header);
if($value == 'RedirectedFrom') {
// what ever you want to do
break;
}
}
我想出了以下解决问题的办法。
站点 B(旧 URL)被重定向到站点 C 的特定脚本,其工作是处理传入请求并在必要时执行重定向。
例如,如果用户浏览站点 A 并单击 link 到站点 B,他将被重定向到站点 C 的 redirect.php
脚本,该脚本接受两个 GET 参数:referrer_url
和 destination
。 referrer_url
是站点 B 的旧 link,destination
是站点 C 的相对路径。
脚本然后确保 destination
不是绝对的 URL(以避免大量重定向到其他站点),将其附加到站点 C 的基础 URL 并重定向用户到适当的页面。 referrer_url
不是必需的,但它可用于检测旧站点 B URL 的域(以防有多个不同的域)。