如何使用window.location.replace Javascript?

23

我的URL

http://www.mysite.com/folder1/page1.aspx
http://www.mysite.com/folder1/page1.aspx?id=1
http://www.mysite.com/folder1/page1.aspx?id=1&dt=20111128

页面重定向

http://www.mysite.com/folder1/page2.aspx

我想要从page1.aspx重定向到page2.aspx

如何在page1.aspx中编写JavaScript代码?

window.location.replace("/page2.aspx");
window.location.replace("../page2.aspx");
window.location.replace("~/page2.aspx");

前两个给了我这个。

http://www.mysite.com/page2.aspx

上一个给了我这个。

http://www.mysite.com/folder1/~/page2.aspx

正确使用的方法是什么?


你究竟想做什么? - JohnP
看起来你需要一种URL重写的形式? - david
1个回答

59

完全不包含任何路径信息,就像链接中一样:

window.location.replace("page2.aspx");

这里有一个实时例子。该示例在以下地址之间切换:

http://jsbin.com/asupup/2   -- "2" 对应于你的 "page1.aspx"

...和

http://jsbin.com/asupup/3   -- "3" 对应于你的 "page2.aspx"

因此,2 页面使用了

window.location.replace("3");

...并且第3页使用了...

window.location.replace("2");

关于URL(特别是相对URL)的更多信息,请参见RFC3986。但基本上:

  • 如果相对URL不是./开头,则替换最后一段。所以:

    http://foo.com/one/two/page.html
  + bar.html
  = http://foo.com/one/two/bar.html
如果相对 URL 以 ../ 开头,它会替换最后一段和上面的一段:
    http://foo.com/one/two/page.html
  + ../bar.html
  = http://foo.com/one/bar.html

请注意,two子文件夹已被替换。可以使用多个../来向上移动多个级别:

    http://foo.com/one/two/three/four/page.html
  + ../../bar.html
  = http://foo.com/one/two/bar.html
如果一个相对URL以单个/开头,它会替换掉主机名(和端口,如果有的话)后面的所有内容。所以:
    http://foo.com/one/two/page.html
  + /bar.html
  = http://foo.com/bar.html

    http://foo.com:8080/one/two/page.html
  + /bar.html
  = http://foo.com:8080/bar.html
如果一个相对URL以//开头,它将替换掉协议后面的所有内容,因此:
  • If a relative URL starts with //, it replaces everything following the protocol, so:

  •     http://ex.com/folder/page.html
      + //foo.com
      = http://foo.com
    

    (当加载资源时,这很方便,因为您不必担心 httphttps 以及混合内容警告。)


    它不会。它将加载相同的页面。 - william
    @william:如果你不在“page2.aspx”上,那就不行。如果你在“http://www.mysite.com/folder1/page1.aspx”上(无论是否有查询字符串),上述代码都会将你带到“http://www.mysite.com/folder1/page2.aspx”。这是相对URL的最基本形式。 - T.J. Crowder
    @william - 如果你仔细想一下,你问题中的第二和第三个URL格式也符合T.J.的建议。 - nnnnnn
    这意味着如果我的URL是http://www.mysite.com/folder1或者http://www.mysite.com/folder1/page1.aspx?id=52,它将无法工作吗? - william
    @william:当您提供一个简单的页面名称,如上所示,它将替换基本URL的最后一段。因此,如果您在http://www.mysite.com/folder1/page1.aspx上,并且相对URL为page2.aspx,则最终得到的结果是http://www.mysite.com/folder1/page2.aspx。如果您的起点不同,则会得到不同的结果(因为这是相对URL的目的)。起始点http://www.mysite.com/folder1http://www.mysite.com/folder1/page1.aspx?id=52是不同的,第二个比第一个更深入层次结构。 - T.J. Crowder
    @william:它满足您在问题中提出的要求(我给出的一个语句可以将您问题中的所有三个“page1.aspx” URL 重定向到“page2.aspx”)。如果您真正理解相对 URL,它可能还能满足您的其他要求;我已经添加了一些关于相对 URL 的注释和参考资料。祝您好运。 - T.J. Crowder

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接