Я действительно не заметил этого перенаправления (301) при запросе такого URL-адреса без косой черты ("/") в конце: http://server/directory
Сервер ответит заголовком 301 Redirect Permanent с заголовком Location, указывающим на http://server/directory/
.
Посмотрите этот живой пример:
Запрос пользователя:
GET /social HTTP/1.1
( http://192.168.1.111/social )
Ответ сервера Apache:
HTTP/1.1 301 Moved Permanently
Location: http://192.168.1.111/social/
Запрос пользователя:
GET /social/ HTTP/1.1
( http://192.168.1.111/social/ )
Ответ сервера Apache:
HTTP/1.1 200 OK
Журнал доступа Apache:
192.168.1.130 - - [05/Apr/2014:22:06:47 +0200] "GET /social HTTP/1.1" 301 558 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0"
-
192.168.1.130 - - [05/Apr/2014:22:06:47 +0200] "GET /social/ HTTP/1.1" 200 942 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0"
Каталог / social / содержит index.html
файл.
Программное обеспечение Apache: Apache/2.2.22 (Ubuntu)
Параметры каталога: Options Indexes FollowSymLinks MultiViews
Итак, мой вопрос: почему apache это делает? И как предотвратить перенаправление и отправить index.html
прямо? Клиенты должны отправить два запроса, в чем нет необходимости. И, возможно, некоторые клиенты не разрешают перенаправления и не смогут перейти на сайт без конечной косой черты («/»).
Я не хочу отключать перенаправление. Я не хочу, чтобы сервер отправлял ответ напрямую без перенаправления. Даже при запросе /social
.
Разработан ли apache для перенаправления этих запросов? Сервер может просто отправлять данные без перенаправления, верно? Следует ли мне использовать mod_rewrite
чтобы предотвратить это? Или другая конфигурация? Или я должен просто позволить этому быть таким и добавить косую черту в конце всех ссылок html и жить с некоторыми перенаправлениями?
Что, вы парни, думаете?
mod_dir
добавляет это перенаправление, и вы можете отключить его с помощью DirectorySlash Off
директива.
Однако обратите внимание, что отключение перенаправления в конце косой черты может привести к поломке некоторых страниц. Если возвращаемая страница содержит относительные ссылки, то эти URL-адреса будут разрешаться по-другому, если страница обслуживается без косой черты в конце.
Отправка данных без перенаправления приведет к разрыву относительных ссылок. Если http://server/directory
содержит file
, то полный URL для этого будет http://server/directory/file
. Ссылка указана как <a href="file">
укажет на http://server/directory/file
если базовый URL http://server/directory/
, но если базовый URL был только http://server/directory
это будет указывать на http://server/file
вместо этого, что не является предполагаемым результатом.
Apache мог создать список каталогов двумя разными способами в зависимости от URL-адреса вместо перенаправления. Однако это не сработало бы, если бы index.html
файл в каталоге. Поэтому вместо этого Apache использует подход, который работает в обоих случаях.
Это не новое поведение, десять лет назад Apache вел себя точно так же. Клиенты, которые не могут обрабатывать перенаправление, уже должны были быть исправлены. Но для любых клиентов, которые не могут обрабатывать перенаправление, Apache должен отправлять крошечный файл html со ссылкой, по которой можно перейти.