【问题标题】:Get root website url in javascript for redirect在 javascript 中获取根网站 url 以进行重定向
【发布时间】:2025-11-28 03:50:01
【问题描述】:

我想在会话超时后从我网站的每个页面重定向到登录页面。 我尝试将 window.location 设置为登录页面:

var ParentUrl = encodeURIComponent(window.parent.location.href);
document.location.href = "~/Login.appx?ReturnUrl=" + ParentUrl;

但“~”似乎不受支持。 我的登录页面位于我的根文件夹下。

例如: *http://server/website/*Login.aspx

如何在 javascript 中获取此网址?

非常感谢,

英巴尔。

【问题讨论】:

  • window.parent.location.href的内容是什么?

标签: javascript asp.net window.location


【解决方案1】:

我会使用 window.location.origin。它将为您返回第一部分,然后只需对父 url 进行 Uri 编码即可!

var parentUrl = encodeURIComponent(window.location.href),
    loginUrl = window.location.origin+"/Login.appx?ReturnUrl=" + parentUrl;

window.location.href = loginUrl;

跨浏览器功能的一个小技巧是使用 window.location。它在所有兼容的浏览器上都是读/写的。虽然 document.location 在某些(即)中是只读的。

【讨论】:

  • 出于好奇,这是 (window.location.origin) 当您有一个以“/”开头的 href 的锚链接时在内部使用的内容吗?例如<a href="/foo">
【解决方案2】:
function getURL() { 
    var arr = window.location.href.split("/"); 
    delete arr[arr.length - 1]; 
    return arr.join("/"); 
}

你可以这样使用它:

document.location.href = getURL() + "Login.appx?ReturnUrl=";

我的函数和第一个答案之间的区别在于“/”将重定向到服务器/页面,而我的代码将重定向(在您的示例 URL 中)到服务器/网站/页面。

【讨论】:

  • 谢谢!但它就像第一个解决方案一样工作。如果我当前的页面是例如:server/website/Pages/Page.aspx,那么我得到 document.location.href = server/website/Pages/Login.aspx 它实际上位于:server/website/Login.aspx
  • 啊,在这种情况下你不能只使用 Javascript。您需要使用 C# 或 PHP 等服务器端语言来计算真实 URL。
【解决方案3】:

为什么要使用 ~ ?乍一看,我会说删除它可以解决您的问题。像这样。

   document.location.href = "/Login.appx?ReturnUrl=" + ParentUrl;

[编辑] 回复第一条评论...

我相信这可以解决问题:

function getLoginPage() {
    var urlParts = document.location.href.split("/");
    return "/" + urlParts[2] + "/" + urlParts[3] + "/Login.aspx";
}

document.location.href = getLoginPage() + "?ReturnUrl=" + ParentUrl;

【讨论】:

【解决方案4】:

“/website”部分通常是服务器端信息。 JavaScript 无法自行确定这一点。

因此,您必须将其从服务器传递到客户端。那你还不如一次性通过"http://server/website"。

【讨论】:

    【解决方案5】:

    此函数将返回当前 url 的根(基本)URL。

    你有类似的东西:http://www.example.com/something/index.html 你要:http://www.example.com/something/

    function getBaseUrl() {
        var re = new RegExp(/^.*\//);
        return re.exec(window.location.href);
    }
    

    详情请看:Javascript: Get base URL or root URL

    【讨论】:

      【解决方案6】:

      我通常会创建一个“settings.js”文件,在其中存储应用程序的一组设置。在这种情况下:

      settings = { "root": "myAppRoot/" /*, ... */ };

      然后在脚本中,例如我调用

      myDynamicDiv.load("/" + settings.root + "urlPart1/urlPart2/app"

      【讨论】:

        【解决方案7】:

        我修改了 PerKristian 的答案,使其适用于我的情况,

        function getBaseUrl() {
            var re = new RegExp(/^.*\/\/[^\/]+/);
            return re.exec(window.location.href);
        }
        

        匹配所有内容,直到第一个单独的/

        例如

        http://*.com/questions/14135479/get-root-website-url-in-javascript-for-redirect

        将返回http://*.com

        【讨论】:

          【解决方案8】:
          function homepage_of(url) { 
              var arr = url.replace('//','@@').split("/");
              return arr[0].replace('@@','//');
          }
          

          【讨论】: