我的网址
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");
前2给了我这个。
http://www.mysite.com/page2.aspx
最后1给了我这个。
http://www.mysite.com/folder1/~/page2.aspx
使用的正确方法是什么?
答案 0 :(得分:48)
根本不包含路径信息,就像在链接中一样:
window.location.replace("page2.aspx");
之间切换
http://jsbin.com/asupup/2 -- The "2" corresponds to your "page1.aspx"
...和
http://jsbin.com/asupup/3 -- The "3" corresponds to your "page2.aspx"
...所以2
页面使用
window.location.replace("3");
...而3
页面使用
window.location.replace("2");
有关网址(特别是相对网址)的工作原理的详情,请参阅RFC3986。但基本上是:
如果相对网址不以.
或/
开头,则会替换最后一个网段。所以:
http://foo.com/one/two/page.html
+ bar.html
= http://foo.com/one/two/bar.html
如果相对网址以../
开头,则会替换最后一段和上面的一段:
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
如果相对网址以//
开头,则会替换协议后的所有内容,因此:
http://ex.com/folder/page.html
+ //foo.com
= http://foo.com
(这在加载资源时非常方便,您希望避免担心http
与https
以及混合内容警告。)