Это могло быть немного необычно, но друг спросил меня об этом, и это меня как-то беспокоит. Как определить текущий путь в адресной строке, если сервер перенаправляет все запросы в файл по умолчанию, скажем, index.html.
Допустим, вы вошли:
www.example.com/
И конфигурация вашего сервера автоматически перенаправляет этот запрос на
www.example.com/index.html
Но адрес в строке вашего url не меняется! Итак, как с помощью Javascript определить, что путь по этому URL-адресу - index.html?
Я заглянул в location.pathname, но это дает мне только /.
Есть идеи?
Если перенаправление происходит на сервере, браузер не знает об этом, и вы не можете получить доступ к фактическому ресурсу в javascript. Например, сервлет может «пересылать» другому ресурсу на сервере.
Если сервер отправляет браузеру команду перенаправления, а браузер запрашивает новый URL-адрес, тогда браузер знает об этом, и вы можете его получить.
Это невозможно сделать, кроме как каким-то образом встроить имя файла веб-сервера в документ. Что касается браузера, то index.html
нет, страница просто /
.
Проблема в том, что на самом деле это не перенаправление. Когда вы вводите 'www.example.com'
в свой веб-браузер, браузер генерирует HTTP-запрос, подобный следующему:
GET / HTTP/1.1
User-Agent: curl/7.16.3 (i686-pc-cygwin) libcurl/7.16.3 OpenSSL/
0.9.8h zlib/1.2.3 libssh2/0.15-CVS
Host: www.example.com
Accept: */*
Обратите внимание, что он запрашивает документ с буквальным названием /
. Сервер может ответить двумя способами:
HTTP/1.1 200 OK
(more headers)
Content...
И
HTTP/1.1 301 Moved Permanently
Location: (location of redirect)
(more headers)
(Optional content)
В случае № 2 вы можете получить адрес перенаправления, поскольку на самом деле это перенаправление. Но в случае № 1 сервер выполняет перенаправление: он видит запрос для /
и вместо этого обслуживает контент для любой его индексной страницы (например, index.html
, index.php
, default.aspx
и т. д.). Что касается вашего браузера, это просто содержимое документа /
. Он не знает, что его перенаправили.