Что в точности означает двойная косая черта, часто встречающаяся в URL?
Например:
http://www.example.com/A/B//C/
Обратите внимание, что я не имею в виду начало сразу после http:
.
url
site-structure
aneuryzm
источник
источник
Как уже упоминалось @RandomBen , двойная косая черта, скорее всего, является результатом ошибки где-то.
То, что страница загружается, не имеет ничего общего с браузером , но сервер игнорирует лишнюю косую черту. Браузер не делает ничего особенного с дополнительными косыми чертами в URL, он просто отправляет их вместе в запросе:
Похоже, что текущие версии Apache и IIS будут игнорировать дополнительные косые черты при определении пути и возвращать документ, который был бы возвращен, если бы в URL не было лишних косых черт. Тем не менее , браузеры (я тестировал IE 8 и Chrome 9) запутываются из-за относительных URL-адресов (содержащих компоненты родительского пути) ресурсов на странице, что приводит к плохим результатам. Например, если страница имеет:
После загрузки страницы
/a/b/c/
браузер запросит/a/style.css
. Но если - по какой-либо причине/a/b//c/
- запрашивается (а сервер игнорирует лишнюю косую черту), браузер в итоге запросит/a/b/style.css
, которого не будет. К сожалению, страница выглядит ужасно.(Это, очевидно, не произойдет, если URL не имеет родительского пути (
..
) или является абсолютным.)Это мое мнение , что Apache и IIS (и , возможно , другие) действуют неправильно , как
/a/b/c/
и/a/b//c/
технически представляют собой два различных ресурсов. Согласно RFC 2396 каждый слэш имеет значение:Итак,
/a/b/c/
состоит из трех сегментов: «а», «б» и «с»;/a/b//c/
на самом деле состоит из четырех: "a", "b", "" (пустая строка) и "c". Является ли пустая строка допустимым каталогом файловой системы, зависит от платформы сервера. (И по логике это означает, что браузеры действительно работают правильно при разборе относительных URL-адресов с родительскими компонентами пути - в моем примере они идут выше каталога «c» и каталога «», оставляя нам запросstyle.css
из «b».)Если вы используете Apache с
mod_rewrite
, есть довольно простое решение :Это приведет к
301 Moved Permanently
перенаправлению HTTP, так что любые двойные слэши будут удалены из URL.источник
mod_rewrite
решение учитывало 3, 4, ... косые черты? Что-то вроде/{2,}
? (Предполагая, что Apache допускает такой квантификатор, я не слишком знаком с ним)a/b
и вa//b
самом деле два различных пути URL, но ничто не запрещает серверу возвращаться один и тот же ресурс для них обоих , если она хочет. Однако я согласен с вами, что на практике возврат перенаправления 301 представляется более полезным.a//b
качестве каталога (см. Пример таблицы стилей выше).Двойная косая черта имеет значение, когда она используется в URL ресурсов. Например, когда это пользователь в CSS для URL фонового изображения:
Здесь это означает, что это фоновое изображение извлекается из другого домена, отличного от домена текущей веб-страницы. Или, другими словами,
http://
может быть написано как только//
при использовании этого в URL ресурсов.Но эта двойная косая черта между URL (например
/a//b/c/d.htm
:) не имеет никакого значения.источник
Как уже упоминалось, некоторые серверы настроены на игнорирование двойной косой черты в пути URL, но статический хостинг Amazon S3 не будет. Если вы хотите обрабатывать / игнорировать их в этом случае, вы можете использовать Правила перенаправления на панели свойств.
Если вы хотите игнорировать двойную косую черту после имени домена, вы можете использовать что-то вроде этого:
Вы также можете найти и заменить их повсюду, но для меня этого было достаточно.
источник