Apache2 - 301 Перенаправлення, коли в кінці каталогу у URL-адресі відсутнє "/"


13

Я дійсно не помітив цього переадресації (301), коли запитував такий URL-адресу без косої риски ("/") наприкінці: http://server/directory

Сервер відповість постійним заголовком 301 Perirect 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

Отже, моє питання: Чому апарат робить це? І як запобігти переадресації та надіслати index.htmlбезпосередньо? Клієнти повинні надіслати два запити, що справді непотрібно. І, можливо, хтось із клієнтів не дозволяє переспрямувати і не зможе зайти на сайт без кінцевої косої риски ("/").

Я не хочу відключати переадресацію. Я не хочу, щоб сервер надсилав відповідь безпосередньо без перенаправлення. Навіть при запиті /social.

Чи призначений apache для перенаправлення цих запитів? Сервер міг просто надсилати дані без перенаправлення, правда? Чи повинен я використовувати mod_rewriteдля запобігання цьому? Або інша конфігурація? Або я повинен просто дозволити це таким чином і додати косу рису в кінці всіх HTML-посилань і жити з деякими переспрямованими?

Як ви думаєте, хлопці?


Я думаю, вам доведеться уточнити, чому ви хочете це відключити. Єдиною розумною альтернативою переадресації буде відповідь 404 /socialу вашому прикладі.
Håkan Lindqvist

Я не хочу його відключати, просто запобігайте переадресації. Я хотів би, щоб сервер index.html
виводив

Під "цим" я мав на увазі нормальну поведінку з перенаправленням з неправильного URL на правильний URL. Дивіться відповідь від @kasperd з деяких причин, чому було б поганою ідеєю подавати вміст, наприклад /social. (Також, як правило, подавати один і той же вміст у кількох URL-адресах зазвичай не бажано.)
Håkan Lindqvist

Відповіді:


10

Надсилання даних без перенаправлення порушить відносні посилання. Якщо він 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 повинен надсилати разом з крихітним HTML-файлом із посиланням, яке може бути заміщене.


Це не дає відповіді на запитання. Правильно, що відносні зв’язки можуть порушитися. Але якщо хтось хоче доставити вміст для контуру без проміжного косого рису, то вони можуть мати для цього причини, наприклад, коли запит POST надсилається до веб-сервісу. У веб-сервісах немає відносних посилань, і перенаправлення призведе до втрати тіла POST.
dr fu manchu

9

mod_dirдодає це переспрямування, і ви можете відключити його за допомогою DirectorySlash Offдирективи.

Однак зауважте, що вимкнення переадресації останньої косої риски може призвести до розриву деяких сторінок. Якщо сторінка, що повертається, містить відносні посилання, то ці URL-адреси вирішуватимуться по-різному, якщо сторінку подаватимуть без косої риски.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.