Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/91.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 重定向到不同域中的同一路径_Javascript_Html_Redirect_Url Redirection - Fatal编程技术网

Javascript 重定向到不同域中的同一路径

Javascript 重定向到不同域中的同一路径,javascript,html,redirect,url-redirection,Javascript,Html,Redirect,Url Redirection,如何通过将对某个page.html的所有请求重定向到另一个域上的相应页面?Github/Gitlab页面将所有未找到页面的错误重定向到后者。是否可以以某种方式检索原始请求的页面,并在Javascript函数中使用它来修改重定向URL 我目前使用类似于以下HTML代码的代码进行多对一重定向,但我更需要一对一重定向(即,不总是指向相同的重定向) 所需情况(一对一): 注意我在Github/Gitlab托管静态网站 特定上下文:我想将我的Gitlab和Bitbucket页面重定向到我的Github页面

如何通过将对某个page.html的所有请求重定向到另一个域上的相应页面?Github/Gitlab页面将所有未找到页面的错误重定向到后者。是否可以以某种方式检索原始请求的页面,并在Javascript函数中使用它来修改重定向URL

我目前使用类似于以下HTML代码的代码进行多对一重定向,但我更需要一对一重定向(即,不总是指向相同的重定向)

所需情况(一对一):

注意我在Github/Gitlab托管静态网站


特定上下文:我想将我的Gitlab和Bitbucket页面重定向到我的Github页面。

在纯Javascript级别上无法做到这一点。这是因为在客户端运行的Javascripts出于安全原因无法访问浏览器历史记录

如果您在服务器端,则可以在代码生成
www.a.net/404.html
上使用
Referer:
HTTP头来生成这样一个404页面,该页面将重定向到所需的目的地

请注意,如果您在客户端执行这些操作,则这些操作显然被认为是更糟糕的解决方案。它们速度较慢,使您的站点依赖于Javascript,而且爬虫程序也无法遵循它(如果他们不够聪明,无法执行站点的Javascript),等等


如果您学习一些服务器端编程语言/框架并使用它,效果会更好;虽然纯客户端解决方案也很常见。

您可以通过Javascript访问推荐人,在那里解析它并相应地重定向

例如


let referer=新URL(document.referer);
让我们来看看http://exampleB.com';
document.location.href=hostRedirection+referer.pathname;
由于我使用的是IE,所以它与IE不兼容(但与Edge兼容),尽管它非常简洁易读。做这件事的时候要小心


如果没有设置引用人,则添加一些错误处理是非常可取的。

在另一篇文章中,我读到了一些关于
窗口位置的信息,其中包含未找到的URL。不确定这具体意味着什么,也不确定这是否仅适用于Github页面。@Matthias有各种技巧,例如,您可以使404.html依赖于原始url(例如,to
404.html?url=Page1.html
)这使您可以从
窗口中读取原始URL。位置
。但所有这些都需要一些服务器端技巧。可以肯定的是:以前访问过的URL对于客户端Java脚本是隐藏的,不管您做什么。您需要找到一些服务器端技巧来将此信息传递给他们。:
[…]返回链接到此页面的页面的URI。[…]
。但是JavaScript
document.referer
Refere
标题可能未设置,或者可能仅包含部分信息,具体取决于浏览器设置@Matthias@t.niese我从来没有这样做过。在古代,客户端JS甚至可以使用
window.history
,现在只有
history.back()
可以工作。你的文档有多大?在Chrome和Firefox中,我获得了
URL
结构的
类型错误,因为
文档。referer
。不过,我想这是当您手动键入路径而不是单击链接时的行为。@Matthias如果您自己编写链接,您显然没有推荐人。我知道,但我也想处理这种情况(即从a href+手动写入重定向)。:-)@马蒂亚斯:这很简单,只要写一张支票,看看推荐人是否未设置。这就是我在回答的最后一行建议的。祝你好运
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8"/>
        <meta http-equiv="refresh" content="0; URL=https://www.B.net/404.html">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
        <meta name="viewport" content="width=device-width; initial-scale=1.0"/>
    </head>
    <body>
        You are being redirected to https://www.B.net/404.html <a href="https://www.B.net/404.html">https://www.B.net/404.html</a>
    </body>
</html>
www.A.net/Page1.html -> www.A.net/404.html -> www.B.net/404.html
www.A.net/Page2.html -> www.A.net/404.html -> www.B.net/404.html
www.A.net/Page1.html -> www.A.net/404.html -> www.B.net/Page1.html
www.A.net/Page2.html -> www.A.net/404.html -> www.B.net/Page2.html
<script>
     let referrer = new URL(document.referrer);
     let hostRedirection = 'http://exampleB.com';

     document.location.href = hostRedirection + referrer.pathname;
</script>