重定向到不同域中的相同路径

时间:2018-07-04 16:18:32

标签: javascript html redirect url-redirection

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

我目前使用类似于以下HTML代码的内容进行多对一重定向,但是我宁愿需要一对一重定向(即并不总是指向相同的https://www.B.net/404.html)。

<!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

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

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

2 个答案:

答案 0 :(得分:2)

您可以通过Javascript访问引荐来源网址,然后在其中进行解析并相应地重定向。

例如

<script>
     let referrer = new URL(document.referrer);
     let hostRedirection = 'http://exampleB.com';

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

由于我使用的是URL,尽管它非常简洁易读,但它与IE不兼容(但与Edge兼容)。用regexp shouldn't be too hard做。

强烈建议在未设置引荐来源网址的情况下添加一些错误处理。

答案 1 :(得分:0)

您不能仅在Javascript级别上执行此操作。这是因为出于安全原因,在客户端运行的Javascript无法访问浏览器历史记录。

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

请注意,如果您在客户端执行此类操作,则显然是较差的解决方案。它们速度较慢,它们使您的网站依赖Java脚本,而且爬网程序将无法跟踪它(如果它们不够聪明,无法执行该站点的javascript),等等。

更好地学习服务器端编程语言/框架并加以使用;尽管纯客户端解决方案也很常见。