Почему некоторые URL-адреса сайтов не включают расширение файла?

Я просматривал Интернет и заметил, что YouTube, например, содержит такой URL-адрес для обозначения страницы с видео: http://www.youtube.com/watch?v=gwS1tGLB0vc.

Мой сайт использует такой URL-адрес для страницы темы: http://www.example.com/page.php?topic_id=6f3246d0sdf42c2jb67abba60ce33d5cc.

Разница в том, что если вы еще не заметили, что на YouTube нет расширения файла для их страницы просмотра, поэтому мне интересно, почему некоторые сайты не используют расширения файлов и зачем они нужны?


person Scarface    schedule 02.09.2010    source источник


Ответы (13)


Расширения файлов не используются из-за идеи, что URI (и, следовательно, URL-адреса) не должны зависеть от реализации — если вы хотите получить доступ к информации CDC о безопасности пищевых продуктов, вы должны иметь возможность перейти на https://www.cdc.gov/foodsafety (например). Для конечного пользователя не имеет значения, используют ли серверы CDC PHP, Python или Perl, поэтому они не должны этого видеть. Конечного пользователя не волнует, как была сгенерирована страница, потому что все языки, обслуживающие веб-страницу, выводят один и тот же HTML, CSS и т.п., а пользователь просто просматривает страницу в своем веб-браузере.

Большинство веб-фреймворков встраивают эту функциональность по умолчанию именно по этой причине, и ее можно реализовать независимо от перезаписи URL-адресов на большинстве веб-серверов. Этот идеал кодифицирован в Руководстве по стилю W3C, которое, несомненно, является большим сторонником этой идеи, получившей столь широкое признание. Это описано в их руководстве Крутые URI не меняются, которое должно очистить вещи вверх, если вы все еще не совсем понимаете рассуждения здесь. Этот документ является основным заявлением по этому вопросу и стандартом де-факто для фреймворков.

Стоит отметить, что обычно файлы, которые в конечном итоге загружаются (а иногда и файлы данных, используемые в AJAX), по-прежнему сохраняют свои расширения файлов - http://example.com/song.mp3 или http://example.com/whitepaper.pdf, потому что они предназначены для сохранения на компьютере конечного пользователя, где расширения файлов имеют значение. Расширения не включаются для страниц, которые просто отображаются — а это большинство страниц.

Постскриптум: примерная страница, на которую изначально ссылался этот ответ, в какой-то момент перестала существовать, потому что иногда URI меняются, несмотря на лучшие практики. Я заменил его страницей безопасности пищевых продуктов CDC, которая существовала в той или иной форме для по крайней мере 20 лет назад. Несомненно, множество различных технологий обслуживали этот контент на протяжении многих лет, всегда делая это по одному и тому же URL-адресу.

person cincodenada    schedule 02.09.2010

То, что вы видите, является примером маршрутизации URL-адресов. Вместо того, чтобы указывать на конкретный файл (например, page.php), сервер использует таблицу маршрутизации или конфигурацию, которая направляет запрос обработчику, который фактически отображает html (или что-либо еще, в зависимости от возвращаемого типа mime). Если вы заметили, StackOverflow использует тот же механизм.

person Pete Amundson    schedule 02.09.2010
comment
какая практическая польза от маршрутизации URL-адресов? - person Scarface; 03.09.2010
comment
Кроме того, может случиться так, что «watch» — это файл PHP, и сервер просто настроен на обработку его как такового даже без расширения — так Википедия делает это, изменив «index.php» на «wiki». - person eds; 03.09.2010
comment
Практическое использование URL-маршрутизации заключается в том, чтобы скрыть реальную реализацию за веб-сайтом. В случае сайтов типа Web2.0, таких как SO, Википедия, Facebook и т. д., эта реализация может быть чрезвычайно запутанной или даже невозможной для представления в виде истинного URL-адреса, потому что это вызов веб-службы, а не обслуживаемый файл. Вместо всего ненужного хлама у вас есть относительно элегантный URL-адрес для добавления в закладки или ссылки на другие сайты. - person KeithS; 03.09.2010
comment
Спасибо, Кит, но когда вы говорите веб-сервис, а не прямой файл, что именно вы имеете в виду? - person Scarface; 03.09.2010
comment
Он имеет в виду, что большинство фреймворков работают следующим образом: http://site.com/index.php?page=category/subcategory/pageid&param1=value1&param2=value2 чтобы очистить URL-адрес, большинство людей используют mod_rewrite, чтобы сопоставить его с: http://site.com/category/subcategory/pageid?param1=value1&param2=value который выглядит более нормальным и более удобен для ввода. - person slebetman; 03.09.2010

Наличие или отсутствие расширения значения не имеет. Браузер действует на основе типа MIME, возвращаемого сервером, а не на любом расширении, используемом в URL-адресе.

person Ignacio Vazquez-Abrams    schedule 02.09.2010
comment
Это на самом деле не объясняет, почему некоторые URI не имеют расширения имени файла. Это не имеет отношения к клиенту, но может иметь отношение к серверу. - person Gumbo; 03.09.2010
comment
Не совсем; сервер будет настроен на расшифровку или перевод URI без помощи расширения. Например, URI этого потока может оказаться http://stackoverflow.com/questions.php?&thread=3631153&title=how-come-some-site-urls-do-not-include-file-extension. Нам не нужно знать, потому что веб-сервер или посредник выполняет перевод. Как и многие ярлыки, это означает, что сайт не может использовать расширения для различения, например, вопросов.php и вопросов.jsp. - person KeithS; 03.09.2010

Когда вы спрашиваете «Почему?» вы спрашиваете по технической причине или по причине дизайна? Некоторые люди уже ответили на технические вопросы, поэтому я просто прокомментирую дизайн.

В основном это сводится к тому, что URL-адрес является конечной точкой. Это то место, куда должны попасть пользователи/службы. Расширение в большинстве случаев не имеет значения. Если пользователь просматривает Интернет и переходит на http://site.com/users, он ожидает список пользователи. Его не волнует, что это не .html или .php. И использование этих расширений как дизайнера не имеет особого смысла. Вы хотите, чтобы ваше приложение имело смысл, а эти расширения на самом деле не дают никакой информации, которая нужна пользователю.

Времена, когда вы хотели бы их использовать, были, если бы вы создавали службу, которую использовали бы другие приложения. Затем вы можете использовать расширение для обозначения того, какие данные можно ожидать получить обратно (.json, .xml и т. д.). Есть люди, работающие над рекомендациями по дизайну и спецификациями для этого материала, но пока все рано.

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

person Nathan Hess    schedule 02.09.2010

Хотя расширения не имеют значения для браузера, который просто использует переданные ему заголовки, чтобы определить, что отображать и как это отображать, скорее всего, они имеют значение на сервере. Например, на вашем компьютере могут быть установлены как интерпретатор php, так и интерпретатор ruby, но на вашем веб-сервере есть файлы конфигурации для сопоставления расширений файлов с типами MIME. Например, из php5.conf Apache:

  AddType application/x-httpd-php .php .phtml .php3

который сообщает Apache, что файлы, оканчивающиеся на .php, .phtml и .php3, должны распознаваться как файлы PHP.

Однако, поскольку расширения ничего не значат для клиента, URL-адреса часто выглядят «красивее» без них. Для этого можно использовать такие технологии, как mod_rewrite Apache. «перепишите» URL-адреса клиентской части, чтобы они имели смысл на сервере.

Например, вы можете настроить mod_rewrite правила, чтобы переписать URL-адрес типа http://yourblog.com/article/the-article-you-wrote (который выглядит лучше, его проще набирать и запоминать) на http://yourblog.com/articles.php?title=the-article-you-wrote, который Apache может использовать для правильной маршрутизации запроса к вашему PHP-скрипту.

person Daniel Vandersluis    schedule 02.09.2010

Ключом является поле Content-Type заголовка ответа HTTP. Что-то такое:

HTTP 200 OK
Content-Type: video/flv
Content-Length: 102345

DATA-DATA-DATA-DATA-DATA-DATA-....

Смотрите также:

Content-Disposition: attachment; filename=genome.jpeg;
     modification-date="Wed, 12 Feb 1997 16:29:51 -0500";

Дополнительные сведения: http://en.wikipedia.org/wiki/MIME

person Notinlist    schedule 02.09.2010
comment
когда вы говорите ключ, вы имеете в виду ключ к тому, как сервер распознает этот файл? - person Scarface; 03.09.2010
comment
Ответ содержит тип MIME в поле Content-Type, поэтому веб-браузер знает, что с ним делать. Он будет отображать text/html не так, как image/png, и так далее. Смысл отсутствия расширения в том, что вам не нужно раскрывать миру свою серверную технологию, например, без .php, без .asp и т. д. .html будет неправильным, потому что это не статические страницы, а только вывод неизвестной технологии в формате HTML. - person Notinlist; 03.09.2010
comment
Кроме того, для нетехнических людей .jsp (или что-то еще) — это еще четыре ненужных и нераспознаваемых символа, которые удлиняют URL-адрес. - person Notinlist; 03.09.2010

Ну, расширения файлов бесполезны в Интернете. Браузеру все равно, какое расширение у файла. Вы можете использовать файл CSS как .avi. Так почему бы просто не оставить это? Это позволяет использовать более короткие URL-адреса.

Кроме того, «переписывание» URL-адреса позволяет сделать его более читаемым. Вы можете не понимать /categories.php?id=455, но понимаете /455-some-category.

Если вы хотите сделать это самостоятельно и используете Apache, взгляните на mod_rewrite.

person NikiC    schedule 02.09.2010

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

URL-адрес, такой как:

mysite.com/sport/soccer/brazil_wins_worldcup

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

mysite.com/article.php?cateogry=12&articleid=371

бесполезен, вместо этого он раскрывает нерелевантные детали реализации, например, какой язык используется для создания сайта и каков идентификатор этой статьи (вероятно, хранится в базе данных под этим идентификатором)

В дополнение к этому эстетическому аргументу (не показывайте пользователю нерелевантные детали реализации) это также помогает сделать сайт перспективным. Потому что, если вы никогда не раскрывали выбранный вами язык с самого начала, вы можете позже перейти на Ruby или Python, без каждой ссылки в мире, которая указывает на вас, теперь это 404.

Создавайте URL-адреса так, чтобы они были понятны пользователям и и ориентированы на будущее.

person Agrajag    schedule 29.04.2011

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

У меня мог бы быть такой URL-адрес, как "http://cory.com/this/really/doesnt/exist" и действительно указывать на "http://cory.com/this.does.exist.123", если бы я захотел.

person Cᴏʀʏ    schedule 02.09.2010
comment
зачем из любопытства использовать маршрутизацию URL? - person Scarface; 03.09.2010
comment
Маршрутизация URL-адресов позволяет сгруппировать связанную логику в одном файле контроллера, а не разделять ее между несколькими автономными файлами PHP. - person meagar; 03.09.2010
comment
Большой из них — SEO (поисковая оптимизация). Некоторым поисковым системам все равно, какие параметры строки запроса есть у страницы, но если вы предоставите URL-адрес, который может перенаправить на страницу, использующую эти параметры, вы мгновенно получите новый результат поиска. Пример: cory.com/category/555/recent может направить на cory.com/category.aspx?id=555&sort=recent. Кроме того, URL-адреса намного легче читать и запоминать. Также имейте в виду, что маршрутизация — это не то же самое, что перезапись — вы увидите, что они неправильно заменяются местами (как я это сделал). - person Cᴏʀʏ; 03.09.2010
comment
@Cory: Не могли бы вы дать ссылку на точку SEO? Я согласен с более легким для чтения, более содержательным, ... Но я не верю в точку SEO;) - person NikiC; 03.09.2010
comment
это также может сделать URL-адреса более красивыми и легкими для запоминания. - person eds; 03.09.2010
comment
@nikic, просто проверьте первые несколько результатов поиска в Google, вы сможете найти достаточно информации, чтобы убедиться, что это действительно помогает SEO. google.com/search?q=url+rewriting+for+seo< /а> - person Cᴏʀʏ; 03.09.2010
comment
Старый комментарий старый :) @Cory старая статья как я ее вижу, она сегодня сводится к использованию URL-адреса для категории, параметров запроса для фильтрации/упорядочивания контента. - person Timo Huovinen; 04.04.2014

Обычное поведение веб-сервера заключается в сопоставлении запрошенного пути URI с файлом где-то в корневом каталоге документа. Таким образом, http://example.com/foo/bar просто отображается на /path/do/document/root/foo/bar. Кроме того, веб-сервер должен знать, как обращаться с файлом. Это часто делается с помощью расширения имени файла. Таким образом, файлы с расширением имени файла .php обрабатываются интерпретатором PHP.

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

В случае веб-сервера Apache первое можно сделать с помощью mod_rewrite:

RewriteEngine on
RewriteRule ^/watch$ /watch.php

И последнее можно сделать с помощью mod_mime:

<File watch>
    ForceType application/x-httpd-php
</File>

(Хорошо, на самом деле это не функция mod_mime, а основная функция. )

person Gumbo    schedule 02.09.2010
comment
Итак, в основном этот пример говорит серверу сопоставить часы с watch.php и говорит серверу обрабатывать как файл php, вводя тип mime? - person Scarface; 03.09.2010
comment
@Scarface: Да, именно так. Оба варианта могут использоваться, так что /watch относится к странице, содержимое которой создается PHP-скриптом. - person Gumbo; 03.09.2010
comment
отлично, спасибо Гамбо за ваше время, я изучу использование этих модов. - person Scarface; 03.09.2010

Правило: расширения файлов не должны включаться в URI

В Интернете символ точки (.) обычно используется для разделения частей имени файла и расширения URI. REST API не должен включать искусственные расширения файлов в URI для указания формата тела объекта сообщения. Вместо этого они должны полагаться на тип носителя, который сообщается через заголовок Content-Type, чтобы определить, как обрабатывать содержимое тела.

(1)http://api.college.restapi.org/students/3248234/transcripts/2005/fall.json (2)http://api.college.restapi.org/students/3248234/transcripts/2005/fall

(1) Расширения файлов не должны использоваться для указания предпочтения формата. (2) Клиентам REST API следует рекомендовать использовать предоставленный HTTP механизм выбора формата, заголовок запроса Accept. ссылки: дизайн REST API Rulebook

person Praveen_Shukla    schedule 18.12.2015

ниже то, что я использую в своем .htaccess, чтобы URL-адрес по-прежнему работал правильно без расширения HTML или PHP.

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f

означает, что если файл с указанным именем в браузере не совпадает с каталогом (-d) или файлами (-f) на вашем веб-сервере, то перепишите правило ниже

RewriteRule ^(.*)$ $1.html

я не уверен, как работает ниже, но я думаю, что после того, как он перепишет с помощью html, и если он все еще не соответствует ему, перепишите с помощью php

RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

если он все еще не соответствует, будет показана страница 404.

вы также можете перенаправить 404 с кодом ниже в .htaccess

ErrorDocument 404 /404.html

важно то, что код работает для моего сайта.

http://mintnet.net/services

http://php.mintnet.net/home

им не нужно расширение файла.

person Võ Minh    schedule 04.04.2017

«www.youtube.com/watch» — это каталог YouTube. Таким образом, в основном это может быть написано как «www.youtube.com/watch/» с косой чертой в конце.

person David    schedule 30.05.2011
comment
вы не можете открывать каталоги, только файлы, URL-адрес, оканчивающийся на каталог, предполагает, что у вас есть файл с именем index (или что-то в этом роде), настроенный на открытие при запросе каталога, например, https://www.youtube.com/watch/ запросит https://www.youtube.com/watch/index.html, но, как мы видим, это не так. В этом случае нет ни одного из других индексных файлов, поэтому, скорее всего, YouTube просто направляет адрес внутри себя. - person Timo Huovinen; 04.04.2014