Как использовать window.location.replace javascript?

Мои 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

Как написать javascript в page1.aspx?

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

Каков правильный способ использования?

Ответы

Ответ 1

Не включать информацию о пути вообще, как в ссылке:

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");

Подробнее о том, как работают 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-адрес начинается с //, он заменяет все, что соответствует протоколу, поэтому:

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

    (Это удобно при загрузке ресурсов, и вы хотите не беспокоиться о http vs. https и предупреждениях смешанного содержания.)