Xpoint
   [напомнить пароль]

Как Apache и браузер трактует «директории» и «файлы» в URL

Предположим, в браузере открыта страница с некоторым URL — http://www.mysite.ru/xyz/news, и в ней приводятся относительные ссылки вида ../abc. Если не используется mod_rewrite, то, казалось бы, вид полного URL для ссылки ../abc должен зависеть от того, является ли news на сервере «директорией» или «файлом». В первом случае (когда news — файл) результирующая ссылка будет выглядеть так: http://www.mysite.ru/abc, а во втором (news — директория) так: http://www.mysite.ru/xyz/abc. Но ведь браузер «ничего не знает» о физическом расположении файлов и каталогов на сервере. Как же он определяет, как преобразовывать относительные пути?

Штука в том, что для браузера вообще нет такого понятия, как «директория» или «файл». Вернее, он трактует любой URL как адрес страницы. Части этого URL разделяются слэшем. Поэтому относительный путь ../abc имеет разное значение в зависимости от вида URL, открытого в браузере:

1. http://www.mysite.ru/xyz/news            -> http://www.mysite.ru/abc
2. http://www.mysite.ru/xyz/news/           -> http://www.mysite.ru/xyz/abc
3. http://www.mysite.ru/xyz/news/index.html -> http://www.mysite.ru/xyz/abc

Обратите внимание: завершающий слэш имеет значение! Итак, в случае (1) news для браузера — «файл», а в случае (2) — «директория» (кавычки тут использованы не напрасно, см. выше).

Чтобы избежать этой двусмысленности Apache, когда Вы пытаетесь зайти по адресу http://www.mysite.ru/xyz/news, проверяет, является ли данный ресурс директорией или файлом, и, если это директория, выдает ответ с редиректом на http://www.mysite.ru/xyz/news/. Это видно по измению адресной строки браузера. Именно поэтому в карте сайта стараются делать все ссылки на «директории» с завершающим слэшем, что экономит одну пару «запрос-ответ».

Необходимо отметить, что такое поведение зашито не в ядро Apache, а в модуль mod_dir, который по-умолчанию присутсвует в сборке. Убрав этот модуль из сборки, можно отключить такое поведение Apache.

Powered by POEM™ Engine Copyright © 2002-2005