Когда я должен использовать косую черту в своем URL?

283

Когда следует использовать косую черту в URL? Например - должен ли мой URL выглядеть /about-us/или как /about-us?

Я полностью осведомлен о вопросах, связанных с SEO - дублированный контент и каноническая вещь; Я пытаюсь выяснить, какой из них мне следует использовать в контексте правильного обслуживания страниц в одиночку.

Например, мой коллега думает, что косая черта в конце означает, что это «папка» - «каталог», так что это неправильный стиль. Но я думаю, что без косой черты в конце - это тоже не совсем правильно, потому что это выглядит почти как папка, но это не так, и это тоже не обычный файл, а имя файла без расширения.

Есть ли правильный способ узнать, какой использовать?

Денис
источник
Конечный слеш, но на мой взгляд это в основном эстетика. Смотри и чувствуй.
Эрик Херлиц
3
Тот же вопрос для профессиональных веб-мастеров: имеет ли значение, если ваш URL-путь заканчивается косой чертой или нет?
Стивен Остермиллер,
4
Этот вопрос задается как вопрос предпочтения , и, таким образом, он кажется не относящимся к теме в первую очередь основанным на мнении . Однако, как показывает мой ответ , на самом деле постановка этого вопроса в качестве предпочтения является ошибкой: это проблема XY, и основной «реальный» вопрос имеет точный технический ответ и, следовательно, не основан главным образом на мнениях .
Raedwald
Вопросы о том, какие типы URL нравится Google, не имеют отношения к программированию (как упомянуто в теге wiki ) и не относятся к теме Stackoverflow.
Квентин
Я внес несколько изменений в ваш вопрос, пожалуйста, перепроверьте их, когда у вас есть возможность сделать это. Спасибо :)
Тим Пост

Ответы:

131

По моему личному мнению, косые черты используются неправильно.

В основном, формат URL был взят из того же формата файлов и папок UNIX, позже, в системах DOS, и, наконец, адаптирован для Интернета.

Типичным URL для этой книги в Unix-подобной операционной системе может быть путь к файлу, например file: ///home/username/RomeoAndJuliet.pdf, идентифицирующий электронную книгу, сохраненную в файле на локальном жестком диске.

Источник: Википедия: Единый идентификатор ресурса

Еще один хороший источник для чтения: Википедия: Схема URI

Согласно RFC 1738, который определил URL-адреса в 1994 году, когда ресурсы содержат ссылки на другие ресурсы, они могут использовать относительные ссылки для определения местоположения второго ресурса, как бы сказать, «в том же месте, что и этот, за исключением следующего относительного дорожка". Далее было сказано, что такие относительные URL-адреса зависят от исходного URL-адреса, содержащего иерархическую структуру, на которой основана относительная ссылка, и что схемы URL-адресов ftp, http и file являются примерами некоторых, которые можно считать иерархическими, причем компоненты иерархии разделяются символом "/".

Источник: Wikipedia Uniform Resource Locator (URL)

Также:

Это вопрос, который мы часто слышим. Вперед к ответам! Исторически сложилось так, что URL-адреса с косой чертой обычно обозначают каталог, а URL-адреса без косой черты - файл:

http://example.com/foo/ (с косой чертой, обычно каталог)

http://example.com/foo (без косой черты, обычно это файл)

Источник: центральный блог Google WebMaster - урезать или не урезать

В заключение:

  1. Косая черта в конце URL делает адрес «красивым».

  2. URL без косой черты в конце и без расширения выглядит несколько «странно».

  3. Вы никогда не назовете свой CSS-файл (например) http://www.sample.com/stylesheet/, не так ли?

НО я являюсь сторонником лучших веб-практик независимо от среды. Это может быть непонятно и непонятно, как вы сказали об URL без доп.

Dementic
источник
1
Это странно, вы не можете назвать файл "stylesheet /" - и косая черта или никакая косая черта - это совершенно разные ресурсы на сервере, независимо от того, как выглядит URL
nico gawenda
10
@nicogawenda, .htaccess может творить всякую магию;) Ваш CSS на самом деле может быть php-файлом!
rmorse
4
Веб - серверы часто создаются по умолчанию , чтобы служить index.html(или аналогичным образом с именем файла) , если каталог доступен, так /foo/это /foo/index.htmlбез дополнительной путаницы. Кроме того, в прошлом браузеры добавляли /к имени домена, но они (Firefox, Chrome, Opera) с тех пор изменились, чтобы пропустить /при доступе к домашней странице.
0b10011
4
Я согласен с @bfrohs. Конечно, страницы по умолчанию для каталогов противоречат этому принципу. Если мы хотим применить «конечный слэш = каталог», то, безусловно, все URL-адреса, указывающие на каталог, должны либо возвращать список каталогов, либо запрещенный ответ http 403.
Марвин
11
Я не уверен, что пункты 1 и 2 в разделе «Наконец» все еще точны. За годы, прошедшие с тех пор, как это было написано, вкусы изменились. Я не изучал это подробно, но кажется, что на более новых веб-сайтах более распространено и "красивее" пропускать косую черту.
скоростной самолет
172

Это не вопрос предпочтения. /baseи /base/имеют разную семантику. Во многих случаях разница не важна. Но это важно, когда есть относительные URL.

  • childотносительно /base/есть /base/child.
  • childпо отношению к /base(возможно, на удивление) /child.
Raedwald
источник
5
Полезная статья, которая углубляется в это: cdivilly.wordpress.com/2014/03/11/…
Гефест
3
Да, я думаю, что это, наряду с SEO, являются наиболее важными вещами в этом вопросе.
user2875289
Просто прошел через эту проблему при использовании .Net Uri.MakeRelativeUri. Результаты отражают именно то, что вы сказали. Я исправил проблему, добавив косую черту к моей базе Uri.
Jullealgon
61

Меня всегда удивляет широкое использование конечных слешей на URL, не относящихся к каталогам (WordPress среди прочих). Это действительно не должно быть спором или-или, потому что ставить косую черту после ресурса семантически неправильно. Сеть была разработана для предоставления адресуемых ресурсов, а эти адреса - URL-адреса - были разработаны для эмуляции иерархии файловой системы в стиле * nix. В этом контексте:

  • Косые черты всегда обозначают каталоги, а не файлы.
  • Файлы могут иметь любое имя (с расширениями или без), но не могут содержать или заканчиваться косой чертой.

Используя эти рекомендации, неправильно ставить косую черту после ресурса, не являющегося каталогом.

Ярина
источник
50
«косая черта после каталогов, а не после ресурсов»: URL-адреса не относятся к двум типам вещей: «ресурсы» и «каталоги»; они относятся к одному виду вещей: ресурсам. Подсказка в R URL.
Raedwald
31
И все в файловой системе * nix - это файл, но каталоги все еще существуют. В чем ваша точка зрения?
Ярин
6
Независимо от того, обслуживается ли он файлом или каталогом, пользователь видит только веб-страницу. И example.com/about действительно может читать из example.com/about/index.html .
Musiphil
1
@DavidRR: Ты прав. И браузер нуждается в перенаправлении, потому что разрешение имен должно происходить изнутри directory(в противном случае, image.pngin http://hostname/directoryуказывает на http://hostname/image.png). Я просто говорил, что различие между файлом и каталогом может быть не очень важным с точки зрения пользователя.
Musiphil
2
Я согласен с вашим результатом, но я не уверен, что мы должны разрабатывать нашу систему URL для эмуляции файловых систем в стиле * nix. Это, возможно, первоначально служило цели, но теперь намного меньше.
скоростной самолет
27

На самом деле это не вопрос эстетики, а техническая разница. Справочник думает об этом полностью правильно и в значительной степени объясняет все. Давайте решим это:

Вы сейчас в каменном веке или обслуживаете только статичные страницы

У вас есть фиксированная структура каталогов на вашем веб-сервере и только статические файлы, такие как изображения, HTML и т. Д. - никаких серверных сценариев или чего-либо еще.

Браузер запрашивает /index.htm, он существует и доставляется клиенту. Позже у вас есть много, скажем, DVD фильмов, просмотренных и HTML-страница для каждого из них в /dvd/каталоге. Теперь кто-то просит, /dvd/adams_apples.htmи он доставлен, потому что он там.

В какой-то день кто-то просто запрашивает /dvd/- это каталог, а сервер пытается выяснить, что доставить. Кроме того , ограничения доступа и так далее есть две возможности: показать пользователю содержимое каталога (я уверен , вы уже видели это где - то) или показать файл по умолчанию (в Apache это: DirectoryIndex: sets the file that Apache will serve if a directory is requested.)

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

В 5:34 вы допустили ошибку при загрузке файлов

(Что, кстати, вполне понятно.) Итак, вы сделали что-то совершенно не так, и вместо загрузки /dvd/the_big_lebowski.htmвы загрузили этот файл как dvd(без расширения) в /.

Кто-то добавил в ваш /dvd/список каталогов (конечно, вы не хотели создавать и всегда обновляли этот отличный index.htm) и посещает ваш веб-сайт. Каталог контента доставлен - все нормально.

Кто-то слышал о вашем списке и печатает /dvd. И теперь это прикручено. Вместо вашего каталога DVD-дисков сервер находит файл с этим именем и доставляет ваш файл Big Lebowski.

Итак, вы удаляете этот файл и говорите парню перезагрузить страницу. Ваш сервер ищет /dvdфайл, но его больше нет. Тогда большинство серверов заметят, что существует каталог с таким именем, и сообщат клиенту, что он действительно искал что-то другое. Ответ, скорее всего, будет:

Status Code:301 Moved Permanently с участием Location: http://[...]/dvd/

Таким образом, полностью игнорируя то, что вы думаете о каталогах или файлах, сервер может обрабатывать только такие вещи и - если не указано иное - решает для вас значение «косая черта или нет».

Наконец, после получения этого ответа, клиент загружается, /dvd/и все в порядке.

Это нормально? Нет.

«Просто отлично» не достаточно хорошо для вас

У вас есть динамическая страница, где все передается /index.phpи обрабатывается. До сих пор все работало довольно хорошо, но все это начинает ощущаться медленнее, и вы начинаете расследование.

Вскоре вы заметите, что /dvd/listделает то же самое: перенаправление, /dvd/list/которое затем внутренне переводится в index.php?controller=dvd&action=list. Еще один запрос - но еще хуже! customer/loginредиректы, на customer/login/которые, в свою очередь, перенаправляются на URL-адрес HTTPS customer/login/. В конечном итоге вы получаете тонны ненужных перенаправлений HTTP (= дополнительные запросы), которые замедляют работу пользователя.

Скорее всего, у вас есть индекс каталога по умолчанию и здесь: index.php?controller=dvdбез actionвнутренних загрузок index.php?controller=dvd&action=list.

Резюме:

  • Если это заканчивается, /это никогда не может быть файлом. Нет предположения сервера.

  • Косая черта или нет - это совершенно разные значения. Существует техническая / ресурсная разница между "косой чертой или без косой черты", и вы должны знать об этом и использовать ее соответствующим образом. Просто потому, что сервер, скорее всего, загружает /dvd/index.htm- или загружает правильный сценарий - когда вы говорите /dvd: он делает это, но не потому, что вы сделали правильный запрос. Который был бы /dvd/.

  • Пропуск слэша, даже если вы действительно имеете в виду, что урезанная версия дает вам дополнительное наказание за HTTP-запрос. Это всегда плохо (подумайте о задержке мобильной связи) и имеет больший вес, чем «симпатичный URL» - тем более, что сканеры не настолько глупы, как считают SEO или хотят, чтобы вы верили;)

Нико Гавенда
источник
2
Таким образом, в резюме вы все для добавления косой черты в конце? :)
Денис
2
Я полностью использую его, когда вы это имеете в виду;) Например, говоря о контроллерах и действиях, это будет: Контроллеры должны заканчиваться косой чертой. Когда вы ссылаетесь на файл или действие, опустите косую черту
nico gawenda
Подожди, почему бы тебе не использовать слеш для действия? Согласно вашему примеру, это не приведет к дополнительному перенаправленному запросу? Я имею в виду, что ваш сервер, по-видимому, достаточно умен, чтобы распознавать действие контроллера, и на самом деле не будет перенаправлять на поиск файлов или каталогов в этом случае, но это все равно идет вразрез с вашим примером, не так ли?
Адам Гудвин
7
Я не понимаю ваш пример. Какая файловая система допускает каталог и другой обычный файл с тем же именем ( dvd)?
Musiphil
19

Когда вы создаете свой URL /about-us/(с завершающей косой чертой), легко начать с одного файла, index.htmlа затем развернуть его и добавить больше файлов (например our-CEO-john-doe.jpg) или даже построить иерархию под ним (например /about-us/company/, /about-us/products/и т. Д.) По мере необходимости, без изменение опубликованного URL . Это дает вам большую гибкость.

musiphil
источник
9
Извини, я не понял. если я начну с /about-usили /about-us/мне все еще нужно изменить опубликованный URL в обоих случаях, если я расширил каталог. новый файл будет /about-us/new-file.htmlв обоих случаях !! что мне здесь не хватает?
Бухгалтер م
2
@Accountant Я думаю, что OP может подумать, что если вы опубликуете "/ about-us" без завершающего слеша, вы не сможете позже добавить подресурсы, используя относительные пути. Если у вас нет косой черты, браузер поверит, что ссылка «ceo.jpg» на странице «о» будет жить в корне вашего домена, и запросит example.com/ceo.jpg. С косой чертой браузер запросит example.com/about-us/ceo.jpg, и вы можете статически маршрутизировать целое дерево папок для вашего сайта по мере расширения.
галка
1
К вашему сведению - я не верю, что все вышесказанное - правда. Почему не может быть /about-usи /about-us/company? С точки зрения обслуживания файлов, Apache и IIS могут справиться с этим просто отлично, поэтому я не согласен.
sean2078
1
@ sean2078 Да, но если, из-за того, что /about-usты хочешь дать ссылку /about-us/company, ты должен использовать href="https://stackoverflow.com/about-us/company"или href="./company"(хотя не уверен насчет этого). Если вы /about-us/, тем не менее, это просто href="company".
Adowrath
11

Другие ответы здесь, кажется, предпочитают опускать косую черту. Есть один случай, когда косая черта поможет с поисковой оптимизацией (SEO). Это тот случай, когда у вашего документа есть расширение файла, которого нет .html. Это становится проблемой для сайтов, которые являются рейтинговыми сайтами. Они могут выбирать между этими двумя URL-адресами:

  • http://mysite.example.com/rated.example.com
  • http://mysite.example.com/rated.example.com/

В таком случае я бы выбрал тот, который заканчивается косой чертой . Это потому, что .comрасширение является расширением для исполняемых командных файлов Windows. Поисковым системам и средствам проверки на вирусы часто не нравятся URL-адреса, которые могут содержать вредоносные программы, распространяемые через такие механизмы. Конечная косая черта, кажется, смягчает любые проблемы, позволяя странице ранжироваться в поисковых системах и проходить проверку на вирусы.

Если ваши URL-адреса отсутствуют .в части файла, я бы порекомендовал опустить косую черту для простоты.

Стивен Остермиллер
источник
Нет реальных поисковых систем, которые так глупы. Этот ответ - чистое предположение.
Навин
1
Я действительно видел эту проблему с Google. Это было несколько лет назад, поэтому я не уверен, что так будет и сегодня.
Стивен Остермиллер
Да, это хорошая точка данных. Хотя мы до сих пор не знаем, было ли это вызвано чем-то другим.
Навин
10

Кто сказал, что имени файла нужно расширение ?? взгляните на машину * nix когда-нибудь ...
Я согласен с вашим другом, без косой черты.

Аарон Гейдж
источник
3

С точки зрения SEO, выбор того, включать ли косую черту в конце URL, не имеет значения. В наши дни в Интернете можно увидеть примеры обоих. Сайт в любом случае не будет оштрафован, и этот выбор не повлияет на рейтинг вашего сайта в поисковых системах или другие SEO-соображения.

Просто выберите соглашение об именовании URL, которое вы предпочитаете, и включите канонический метатег в <head>раздел каждой веб-страницы.

Поисковые системы могут рассмотреть один веб - страницы в виде двух отдельных дублирующих URLS , когда они сталкиваются с его и без слэш, то есть example.com/about-us/и example.com/about-us.

Рекомендуется добавлять на каждую страницу канонический метатег, поскольку вы не можете контролировать, как другие сайты ссылаются на ваши URL-адреса.

Канонический тег выглядит следующим образом : <link rel="canonical" href="https://example.com/about-us" />. Использование канонического метатега гарантирует, что поисковые системы будут подсчитывать каждый из ваших URL только один раз, независимо от того, есть ли у других веб-сайтов косая черта, когда они ссылаются на ваш сайт.

бунт
источник