javascript - 用户访问网站的查看页面源时如何重定向?
问题描述
我正在使用下面的代码来重定向不是来自谷歌的用户。它还可以防止直接访问该链接而无需去谷歌。但是为什么当我查看我的域的页面源(查看源: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);
}
解决方案
您在原始问题的评论中链接的示例使用基于标头的重定向,这就是为什么当您将 Chrome 实例指向 时view-source:rshrt.com/getlink/YCy
,它会将您重定向到目标页面。这与浏览器处理基于标头的重定向的方式一致。如果您打开开发人员工具的“网络”选项卡并检查浏览器发送到目标站点的请求,则可以确认这一事实,该请求显示rshrt.com
带有状态代码的页面重定向(以及指向目标页面301 Moved Permanently
的相应标题):Location
在您自己的示例中,您正在使用 JavaScript 执行重定向。使用view-source
. 因此,重定向永远不会发生。
如果您希望它的功能更像您作为示例提供的站点,则必须在服务器级别配置这些重定向规则以正确返回 a 301
or302
状态代码(以及适当的Location
标头),而不是在客户端级别使用 JavaScript。您将如何具体完成这完全取决于您的服务器运行的堆栈,并且可以说超出了您提出的问题的当前范围。
推荐阅读
- java - JPQL 多对多计数直方图
- c++ - 计算选定行的总和
- java - 数据驱动无法使用 Testng 数据提供程序
- python - Python Flask:如何将字典对象转换为 json?
- python-3.x - Python3:调用一个类作为一个单独的进程
- javascript - bootstrap 4 使用 js 隐藏元素
- c# - 从调整大小事件
- azure - Azure 媒体服务直播/点播
- javascript - date-fns 中的什么方法相当于 moment().toISOString()
- android - 微调器无法应用于(匿名 android.widget.AdapterView.onitemselectedlistener)