Есть ли способ всегда требовать или форсировать субдомен «www» на сайте? - PullRequest
4 голосов
/ 04 февраля 2009

Я хочу запретить пользователям переходить на сайт example.com и заходить только на сайт www.example.com, мы используем IIS 6. Так что они переходят на сайт example.com, который можно прикрепить на сайте www.example.com, и т.д.

Это где-то параметр или мне придется его кодировать, чтобы проверить поддомен, когда они приземляются и перенаправляют соответственно?

РЕДАКТИРОВАТЬ: я знаю, что лучший способ - это отойти от префикса www, но по любой причине, если пользователь запускает курс (это LMS) без www в URL, отслеживание не работает для файла .asmx Вот почему я пытаюсь использовать «www», потому что если у некоторых людей его нет, они задаются вопросом, почему не работает отслеживание.

Ответы [ 11 ]

6 голосов
/ 04 февраля 2009

Если вы используете ASP.NET, создайте HttpModule, обработайте событие BeginRequest и добавьте этот код в ваш обработчик:

HttpApplication application = (HttpApplication)source;
HttpContext context = application.Context;

if (context.Request.Url.Host == "example.com")
{
context.Response.Clear();
context.Response.Status = "301 Moved Permanently";
context.Response.AddHeader("Location", "http://www.example.com" + context.Request.RawUrl);
}

Обратите внимание, что я не использовал Response.Redirect (), это сделано ради SEO, так как Response.Redirect () всегда возвращает статус 302, который означает, что объект был временно перемещен, а статус 301 означает, что объект был перемещен навсегда, это предотвратит разделение PageRank ваших страниц между версиями www и non-www (если сканеры поисковых систем могут получить доступ к странице, используя как URL-адреса www, так и не-www, они будут делить ваш PageRank между двумя следовательно, это использование 301, которое сканеры поисковых систем понимают и сохранят ваш PageRank только для www-версии вашего сайта).

5 голосов
/ 04 февраля 2009

Поскольку обе записи уже указывают на правильный сервер ...

... вы можете просто настроить новый веб-сайт в IIS (необходима версия сервера), и он будет отвечать только на example.com (настройка заголовка узла) и перенаправить его на нужный URL-адрес (установите флажок перенаправить на URL-адрес Вкладка «Домашний каталог» и введите www.example.com). Исходный сайт должен затем обработать его (вы можете установить его заголовок, чтобы он отвечал на www.example.com, чтобы быть более конкретным).

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

4 голосов
/ 04 февраля 2009

Как и в других ответах, организовать переадресацию 301 с неукрашенного доменного имени на сайт с префиксом www..

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

На данный момент, по крайней мере, IMHO, предпочтительная версия URL должна быть с префиксом www.. Часть имени хоста в URL - это именно то, что это имя хоста . Единственные записи ресурсов DNS, которые будет искать ваш браузер, - это записи A (и, возможно, AAAA для IPv6), и в результате получается IP-адрес, к которому он будет подключаться.

Это , а не адрес веб-сайта - только полный URL-адрес (с префиксом http://) указывает, что этот хост ожидает получения HTTP-соединений через порт 80.

Основная причина префикса www. в первую очередь заключалась в том, чтобы обеспечить разделение разных протоколов на разные хосты. Как показал Verisign, когда они (кратко) представили свой сервис SiteFinder несколько лет назад, предполагать, что каждый запрос записи A для использования протокола HTTP является серьезной ошибкой.

Каноническая версия вашего URL - это с префиксом www., что также упрощает обработку файлов cookie и упрощает разделение статического контента на сети доставки контента (как рекомендовано Yahoo! Google и т. Д.).

Теперь существует тип записи DNS (SRV, см. RFC 2782 ), который использует префикс службы и транспорта, чтобы разрешить одному доменному имени отправлять разные протоколы на разные узлы (и, следовательно, IP). адреса).

Идеальная настройка DNS - это запись, которая выглядит следующим образом:

_http._tcp.example.com IN SRV 10 0 80 www.example.com.

Это говорит о том, что все запросы HTTP URI через TCP / IP должны быть адресованы на порт TCP 80 на имя хоста www.example.com. Обратите внимание, что с этим синтаксисом вы также можете автоматически получать HTTP-сервисы от портов, отличных от порта 80, без указания номера порта в URL.

Запись SRV является обязательной частью SIP и обычно используется для Jabber (XMPP). Однако AFAIK ни один браузер не использует его. (

0 голосов
/ 29 ноября 2014

Для сервера на базе Apache вы можете использовать этот код

RewriteEngine On    
RewriteCond %{HTTP_HOST} !^www\.yourdomain\.com$ [NC]    
RewriteRule (.*) http://www.yourdomain.com/$1 [R=301,L]

Объяснение: Первая строка просто включает механизм перезаписи. Вторая строка кода предназначена для проверки введенного пользователем URL. Знак bash (!) Означает, что он не равен. Знак моркови (^) означает начало оператора, подлежащего проверке. Точка с обратной косой чертой (.) Относится к специальному символу точки, который при использовании без обратной косой черты означает «что угодно». Знак доллара в конце выписки относится к концу URL. Третье утверждение гласит, что если ввод данных, введенных пользователями, не такой, как ввод во втором утверждении, то действуйте следующим образом. (. *) означает что угодно и сколько угодно раз. Это используется для сохранения чего-либо, написанного пользователем после yourdomain.com/, в переменной $ 1. R = 301 относится к постоянному перенаправлению, а L заявляет, что это последнее в серии кодов состояния.

0 голосов
/ 04 февраля 2009

На моем веб-сайте я просто поместил в файл .htaccess следующее:

RewriteEngine on
RewriteBase /
RewriteCond   %{HTTP_HOST}   ^tafkas\.net$   [NC] 
RewriteRule   ^(.*)$  http://www.tafkas.net/$1   [L,R=301]
0 голосов
/ 04 февраля 2009

Когда мне посчастливилось работать над веб-стеком Microsoft, я использовал ISAPI_Rewrite для принудительного использования www. префикс (между прочим).

0 голосов
/ 04 февраля 2009

Типичный способ сделать это на веб-сайтах - перенаправить HTTP с example.com на www.example.com. Вы делаете это, возвращая код состояния HTTP 301 (постоянное перенаправление) или 302 (временное перенаправление), когда пользователь заходит на example.com, и устанавливая поле HTTP location: в ответе на http://www.example.com. Google для «301 против 302 ", чтобы увидеть, когда вы должны использовать либо.

Обратите внимание, что это функция HTTP, а не то, что предоставляется DNS ... некоторые провайдеры доменных имен, тем не менее, предоставляют вам возможность перенаправления HTTP, если вы используете их серверы имен.

Обратите внимание, что вы можете проверить это сами. Перейдите на http://web -sniffer.net и введите yahoo.com (или microsoft.com или любой другой крупный веб-сайт). Вы увидите, что они отвечают на перенаправление с помощью версии имени www (в редких случаях некоторые веб-сайты идут другим путем, перенаправьте www на версию имени без www).

0 голосов
/ 04 февраля 2009

Вот как это работает, независимо от того, следует ли вам.

Это обрабатывается DNS. Обычно example.com и www.example.com указывают на один и тот же сервер, но это не обязательно. Если www.example.com явно не зарегистрирован, то запрос отправляется на сервер example.com, и этот сервер должен решить, что означает www.example.com, а также mail.example.com, ftp.example. .com, home.example.com, users.example.com и т. д.

Редактировать: я понимаю, что эта история не завершена, так как в эти дни Apache получает URL-адрес, с которым вы входили, и может интерпретировать субдомен с этого и направить запрос на виртуальный сайт. Но это не должно быть фактором на уровне "www".

0 голосов
/ 04 февраля 2009

Как указано, добавление WWW - противоположное направление. В наши дни WWW - это избыточность.

Вы можете проверить http://no -www.org / для получения дополнительной информации.

0 голосов
/ 04 февраля 2009

Свяжитесь с вашим хостом (или регистратором домена) и попросите его настроить его для работы с или без www. Однако он должен работать в обе стороны или только в одну сторону, если вы этого хотите. Я предполагаю, что у вас есть хост и вы не используете свой собственный веб-сервер / регистрацию доменного имени, смеется.

...