首页 > 解决方案 > 用户访问网站的查看页面源时如何重定向?

问题描述

我正在使用下面的代码来重定向不是来自谷歌的用户。它还可以防止直接访问该链接而无需去谷歌。但是为什么当我查看我的域的页面源(查看源:https ://owndomain.com/NMkrujlS )时,它没有重定向到 example.com?查看页面源不是直接访问我的域吗?我怎样才能解决这个问题?谢谢

我的代码:

var ref = document.referrer;
if (ref.match(/^https?:\/\/([^\/]+\.)?google\.com(\/|$)/i)) {
    // do nothing
} else {
   // redirect
   window.location.replace("https://example.com" + window.location.pathname);
}

标签: javascriptredirect

解决方案


您在原始问题的评论中链接的示例使用基于标头的重定向,这就是为什么当您将 Chrome 实例指向 时view-source:rshrt.com/getlink/YCy,它会将您重定向到目标页面。这与浏览器处理基于标头的重定向的方式一致。如果您打开开发人员工具的“网络”选项卡并检查浏览器发送到目标站点的请求,则可以确认这一事实,该请求显示rshrt.com带有状态代码的页面重定向(以及指向目标页面301 Moved Permanently的相应标题):Location

在此处输入图像描述


在您自己的示例中,您正在使用 JavaScript 执行重定向。使用view-source. 因此,重定向永远不会发生。

如果您希望它的功能更像您作为示例提供的站点,则必须在服务器级别配置这些重定向规则以正确返回 a 301or302状态代码(以及适当的Location标头),而不是在客户端级别使用 JavaScript。您将如何具体完成这完全取决于您的服务器运行的堆栈,并且可以说超出了您提出的问题的当前范围。


推荐阅读