Я действительно не заметил этот Redirect (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 access.log:
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 и жить с некоторыми перенаправлениями?
Что, вы парни, думаете?
/social
в вашем примере.index.html
/social
. (Кроме того, как правило, нежелательно показывать один и тот же контент по нескольким 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-файл со ссылкой, по которой можно перейти.
источник
mod_dir
добавляет это перенаправление, и вы можете отключить его с помощьюDirectorySlash Off
директивы.Обратите внимание, однако, что отключение перенаправления косой черты может привести к разрыву некоторых страниц. Если возвращаемая страница содержит относительные ссылки, то эти URL-адреса будут обрабатываться по-другому, если страница обслуживается без завершающей косой черты.
источник