03.06.2009

Отказ от префикса www

Делаю на всех своих проектах перенаправление «www → без www». Делается это элементарно, через создание файла .htaccess с директивами для сервера. Например, для orss.ru:

RewriteEngine On
Options +FollowSymlinks
RewriteCond %{http_host} ^www.orss.ru [NC]
RewriteRule ^(.*)$ http://orss.ru/$1 [R=301,NC]

Теперь пояснение, зачем это нужно. Собственно, аргументы тут остаются одинаковыми уже много лет. «Префикс www для написания доменного имени — не является технической необходимостью. Когда-то давно, когда протокол http не был так распространен как сегодня, приставкой www пользовались для того чтобы указать на принадлежность адреса к интернет-пространству, названному World Wide Web (WWW)» — пишут nowww.ru.

Почему же тогда я и многие другие годами делали перенаправление наоборот, «без www → www»? Потому что еще 5 лет назад люди просто не узнавали надписи вроде «perfectomania.com». А вот «www.perfectomania.com» — узнавали. Даже «http://» служило менее узнаваемым префиксом. Более того, диктуя, например, в эфире телевидения адрес сайта — «http://» редко произносилось. Чтобы указать на то, что это диктуется адрес в Сети — произносилось «www». Собственно и сейчас в большинстве случаев делается именно так.

Так вот, чтобы не путать неискушенных и не создавать два пространства URL-адресов, многие и делали обратное перенаправление. Что же изменилось сейчас? Для меня ответ простой — не узнавать в 2009 году адрес вида «perfectomania.com» исключительно по окончанию «.com» — это уже стыдно даже для среднего обывателя. Поэтому, поддерживать устаревшую форму больше нет никакого смысла.


Теги (в разработке): ,



Комментарии (28) RSS

  1. zerkms | 03.06.2009 at 13:33

    Есть небольшой недостаток – после такого редиректа ты потеряешь якорь :-)
    Да и про аргументы $_GET ты, кстати, забыл.


  2. Роман Настенко | 03.06.2009 at 13:36

    zerkms, а можно подробнее про якорь и GET? Буду благодарен.


  3. ukrainets | 03.06.2009 at 13:37

    Обсолютно згідний лишній раз писати WWW немає потреби, але ще є допотопні сайти на котрі не попасти без цього префікса. От як сайт колишнього провайдера http://www.bit.te.ua чи http://www.profoto.te.ua котрий в мережі того ж провайдера.


  4. zerkms | 03.06.2009 at 13:41

    Если в урле у тебя будет часть ?a=b&c=d то вышеприведённые правила их похерят
    [R=301,NC,QSA]
    http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewriteflags


  5. Роман Настенко | 03.06.2009 at 13:51

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


  6. zerkms | 03.06.2009 at 13:56

  7. Роман Настенко | 03.06.2009 at 13:58

    zerkms, о, спасибо :)
    А как это исправить? :) (сейчас сам попробую)


  8. zerkms | 03.06.2009 at 13:59

    про якорь кстати забыл. если в урле будет якорь
    http://perfectomania.com/blog/2009/06/no-www/#comment-127581
    вот как в урле выше, то подобный редирект этот якорь потеряет. потому как якорь вообще не передаётся браузером на сервер.


  9. zerkms | 03.06.2009 at 14:00

    А как это исправить? :) (сейчас сам попробую)

    я же во 2 своём посте дал ссылку на директивы и поправил, дописав ещё одну, которая отвечает за query string.


  10. Роман Настенко | 03.06.2009 at 14:28

    zerkms, сделал QSA. Теперь проблема в русских символах, которые заменяются на «%EF%F0%EE%E2%E5%F0%EA%E0». Пробую директиву NE — глючит.


  11. zerkms | 03.06.2009 at 14:34

    http://localhost/aaaaaaa?s=%EF%F0%EE%E2%E5%F0%EA%E0

    с правилом

    RewriteCond %{SCRIPT_FILENAME} !-f
    RewriteRule (.*) index.php [QSA]

    и

    var_dump($_GET);

    выводит array(1) { ["s"]=> string(8) «проверка» }


  12. Олег Гирько | 03.06.2009 at 15:20

    Данное рассуждение верно только если единственный предоставляемый сервис — это web. Однако, не все так однозначно, если сервисов несколько.

    Если у нас есть организация, ее домен — example.com, и у этой организации есть несколько серверов, выполняющих разные функции, то вполне логично, что их внешне видимые имена будут соответствующими:
    http://www.example.com — web-сервер,
    http://ftp.example.com — FTP-сервер,
    svn.example.com — сервер Subversion,
    xmpp.example.com — сервер XMPP (Jabber)
    и т.д.

    В идеале было бы неплохо, если бы все клиенты обращались по одному имени example.com (без всяких префиксов) и получали нужные им сервисы, но реализовать это в общем случае не так просто.

    Для SMTP (протокола доставки email) эта проблема давно уже решена: в доменной системе имен (DNS) есть специальные записи «MX», с помощью которых можно задавать, куда доставлять почту для данного домена.

    Для других сервисов в DNS’е есть записи «SRV», с помощью которых можно задавать сервера и порты к которым обращаться за сервисом. Проблема в том, что эти записи были введены слишком поздно, и никто их не использует кроме клиентов XMPP (Jabber), да и то не всех. Все остальные клиенты (в том числе, и web browser’ы) просто используют запись «A», которая задает соответствие имени адресу IP (или «AAAA» для IPv6).

    Единственное работающее на данный момент решение — это сделать все сервисы доступными на одном адресе IP и повесить на этом адресе переписывание пакетов (port forwarding), чтобы соединения, предназначенные для разных сервисов, перенаправлялись на разные физические сервера. Такое решение требует дополнительных затрат на установку и администрирование, а также создает «слабое звено» (single point of failure): если устройство, занимающееся перенаправлением соединений, выйдет из строя, будут недоступны сразу все сервисы.

    Таким образом, доменный префикс «www» (и другие подобные доменные префиксы) появились потому, что изначально в доменной системе имен был недостаток, а исправлен этот недостаток был слишком поздно. Пока все web browser’ы не будут использовать записи «SRV», префикс «www» не изжить.


  13. Олег Гирько | 03.06.2009 at 15:24

    Кстати, переписывать доменные имена в коментариях, превращая их в URL’ы и добавляя префикс «http://» — это не очень хорошая практика. К чему это приводит, можно видеть в предыдущем коментарии.


  14. ForJest | 03.06.2009 at 18:11

  15. Роман Настенко | 03.06.2009 at 18:12

    ForJest, че?


  16. ForJest | 03.06.2009 at 18:14

    Таким образом, доменный префикс «www» (и другие подобные доменные префиксы) появились потому, что изначально в доменной системе имен был недостаток, а исправлен этот недостаток был слишком поздно. Пока все web browser’ы не будут использовать записи «SRV», префикс «www» не изжить.

    Ну конечно. Что мешает example.com сделать под HTTP, а все остальные сервисы – с «префиксами»?


  17. Олег Гирько | 03.06.2009 at 19:35

    Ну конечно. Что мешает example.com сделать под HTTP, а все остальные сервисы – с “префиксами”

    А почему именно HTTP, а не FTP или XMPP?

    Кстати, не только разные сервисы могут быть с разными префиксами, но и один сервис, предоставляющий контент по разным темам.
    Например:
    http://www.example.com — web-сайт,
    shop.example.com — электронный магазин,
    forum.example.com — web-форум
    и т.п.

    Похожую по принципу систему именования использует Google для своих сайтов.


  18. Роман Настенко | 03.06.2009 at 19:49

    Олег Гирько, я думаю ForJest имеет в виду, что почему не

    http://example.com — web-сайт,
    http://shop.example.com — электронный магазин,
    http://forum.example.com — web-форум


  19. ForJest | 03.06.2009 at 19:57

    А почему именно HTTP, а не FTP или XMPP?

    По той же по самой причине, по которой вбитое в браузер доменное имя будет снабжается протоколом http://

    Опять же, давайте сходу определим, за какой сервис отвечает домен с «префиксом»: deniskin.habrahabr.ru?


  20. Олег Гирько | 03.06.2009 at 20:21

    Тогда уж более логично было бы иметь
    http://example.com/ — основной сайт,
    http://example.com/shop/ — магазин,
    http://example.com/forum/ — форум.
    По крайней мере, я бы делал так. Но это все — один сервис: HTTP. Проблема возникает когда мы хотим иметь несколько разных сервисов.

    Если не использовать решение с port forwarding’ом, которое я упомянул выше, получим:
    http://example.com/
    но:
    ftp://ftp.example.com/
    svn://svn.example.com/
    и т.д.

    Почему это сервис HTTP должен быть каким-то особенным?


  21. Иван Кучеренко | 03.06.2009 at 20:54

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


  22. Роман Настенко | 03.06.2009 at 20:56

    Иван Кучеренко, сейчас блоги, не большие проекты. Через пару лет — и большие тоже.


  23. ForJest | 03.06.2009 at 23:10

    я голосую за http.example.com


  24. xorax | 04.06.2009 at 23:22

    Всё так и было до недавнего времени. Но тут появился Google App Engine. Вы пробовали привязать кастомный домен к нему? Я пробовал. Без www — никак. Мало того, без www вообще не работает. Думается, что отныне такие «облачные» платформы запуска будут только развиваться, а в них все эти доменные дела выглядят несколько иначе.


  25. Олег Гирько | 07.06.2009 at 1:23

    А почему именно HTTP, а не FTP или XMPP?

    По той же по самой причине, по которой вбитое в браузер доменное имя будет снабжается протоколом http://

    Не вижу логической связи. Для browser’а как раз протокол HTTP особенный. А вот для домена — нет.

    Опять же, давайте сходу определим, за какой сервис отвечает домен с “префиксом”: deniskin.habrahabr.ru?

    Да буквально за какой угодно. Если ввести это доменное имя в строке адреса в browser’е, он попытается обратиться по адресу, соответствующему этому имени, по протоколу HTTP. А если передать это имя клиенту FTP, он попытается обратиться по протоколу FTP.


  26. Олег Гирько | 07.06.2009 at 1:31

    Что-то не так с автоподстановкой на этом сайте. Можно понять (но не оправдать), когда «http://» дописывается в начале чего-то, похожего на доменное имя. Но когда это дописывается к слову «FTP», заканчивающемуся точкой, единственным логическим объяснением является ошибка в программе. Это еще одно подтверждение правила: когда пытаются сделать программу, которая должна догадываться, что имел в виду пользователь, в большинстве случаев эта программа будет догадываться неверно.


  27. ForJest | 07.06.2009 at 2:23

    Ты победил. Всё. На example.com с завтрашнего дня все обязаны ставить XMPP. Если нету XMPP, то хотя бы FTP. HTTP – вне закона.


  28. Данила Вершинин | 25.08.2009 at 16:46

    Yahoo! не рекомендует убирать www




Комментировать