Что означает двойная косая черта в URL-адресах?

Что такое двойные слэши, которые часто встречаются в среднем URL?

Например:

  • http://www.example.com/A/B//C/

Обратите внимание, что я не говорю о начале сразу после http:.

32 голоса | спросил aneuryzm 27 Jpm1000000pmThu, 27 Jan 2011 18:00:21 +030011 2011, 18:00:21

4 ответа


30

Это ошибка в коде программистов /разработчиков. Если вы сравниваете эти два URL:

  • http://www.example.com/A/B/C/
  • http://www.example.com/A/B//C/

Они выглядят по-разному, но если бы вы тоже посетили, они оба работали бы в большинстве современных браузеров.

Это то, что вы хотите исправить. Если у вас есть двойная косая черта, это может запутать поисковые роботы Google и заставить их думать, что есть 2 версии страницы.

ответил Ben Hoffman 27 Jpm1000000pmThu, 27 Jan 2011 18:08:52 +030011 2011, 18:08:52
32

Как упоминалось @RandomBen , двойная косая черта, скорее всего, является результатом ошибки где-то.

То, что загрузка страницы не имеет ничего общего с браузером , а скорее, что сервер игнорирует дополнительную косую черту. Браузер не делает ничего особенного с дополнительными косой чертой в URL-адресе, он просто отправляет их в запрос:

GET /A /B //C /D HTTP /1.1
Хост: www.example.com
...

Похоже, что текущие версии Apache и IIS будут игнорировать лишние косые черты при разрешении пути и возвращать документ, который был бы возвращен, если бы URL-адрес не имел дополнительных косых черт. Однако , браузеры (я тестировал IE 8 и Chrome 9) путают любые относительные URL-адреса (содержащие исходные компоненты пути) ресурсов на странице, что приводит к плохим результатам. Например, если на странице есть:

<link rel = "stylesheet" href = "../../style.css" type = "text /css" />

После загрузки страницы /a /b /c / браузер запросит /a/style.css. Но если «по какой-либо причине» /a /b //c / запрашивается (и сервер игнорирует дополнительную косую черту), браузер будет запрашивать /a /b /style.css, которого не будет. К сожалению, страница выглядит уродливой.

(Это, очевидно, не произойдет, если URL-адрес не имеет родительского компонента пути (..) или является абсолютным.)

Я считаю, что Apache и IIS (и, возможно, другие) действуют неправильно как /a /b /c / и /a /b //c / технически представляют два разных ресурса. Согласно RFC 2396 , каждый снимок значителен:

path = [abs_path | opaque_part]

  path_segments = сегмент * (сегмент «/»)
  segment = * pchar * (";" param)
  param = * pchar

  pchar = unreserved | сбежал |
                  ":" | "@" | "& Амп;" | "=" | "+" | "$" | ""

Итак, /a /b /c / состоит из трех сегментов: «a», «b» и «c»; /a /b //c / состоит из четырех: «a», «b», «» (пустая строка) и «c». Является ли пустая строка допустимым каталогом файловой системы, является деталью платформы сервера. (И логически, это означает, что браузеры действительно работают правильно при анализе относительных URL-адресов с родительскими компонентами пути - в моем примере они проходят через каталог «c» и «», оставляя нас запросить style.css с "b".)

Если вы используете Apache с mod_rewrite, есть довольно простое исправление :

# удалить несколько слэшей в любом месте URL-адреса
RewriteCond% {REQUEST_URI} ^ (. *) //(. *) $
RewriteRule. % 1 /% 2 [R = 301, L]

Это приведет к перенаправлению HTTP 301 Moved Permently, чтобы любые двойные косые черты были удалены из URL.

ответил josh3736 28 Jam1000000amFri, 28 Jan 2011 00:28:58 +030011 2011, 00:28:58
4

Двойная косая черта имеет смысл, когда она используется в URL-адресе ресурса. Например, когда пользователь в CSS использует URL-адрес фонового изображения:

.classname {
    background: url ("//example.com/a/b/c/d.png");
}

Здесь это означает, что это фоновое изображение извлекается из другого домена, кроме домена данной веб-страницы. Другими словами, http: // может быть записан как только // при использовании этого в URL ресурса.

Но эта двойная косая черта между URL-адресами (например: /a//b/c/d.htm) не имеет никакого значения.

ответил Alan Joseph 21 +04002013-10-21T09:53:08+04:00312013bEurope/MoscowMon, 21 Oct 2013 09:53:08 +0400 2013, 09:53:08
2

Как уже упоминалось, некоторые серверы настроены так, чтобы игнорировать двойную косую черту в URL-адресе, но статический хостинг Amazon S3 не будет. Если вы хотите обрабатывать /игнорировать их в этом случае, вы можете использовать Правила перенаправления на панели свойств.

Если вы хотите игнорировать двойную косую черту после имени домена, вы можете использовать что-то вроде этого:

& л; RoutingRules >
  & Lt; RoutingRule >
    & Lt; & Состояние GT;
      & Lt; KeyPrefixEquals > /& л; /KeyPrefixEquals >
    & Lt; /Состояние >
    & Lt; Перенаправление >
      & Lt; ReplaceKeyPrefixWith />
    & Lt; /Перенаправление >
  & Lt; /RoutingRule >
& Lt; /RoutingRules >

Возможно, вы также можете найти и заменить их повсюду, но этого было достаточно для меня.

ответил orlade 29 J0000006Europe/Moscow 2015, 09:29:42

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132