Подтвердить что ты не робот

Как перенаправить URL-адрес "www" без URL-адреса "www" или наоборот?

Я использую ASP.NET 2.0 С#. Я хочу перенаправить весь запрос для моего веб-приложения с "www" без "www"

www.example.com к example.com

или

example.com на www.example.com

Stackoverflow.com уже делает это, я знаю, что в файле PHP (.htaccess) есть механизм предварительной обработки. Но как это сделать в asp.net?

Спасибо

4b9b3361

Ответ 1

В прошлом я пошел со следующим решением, когда мне не удалось изменить настройки IIS.

Либо в HTTPModule (возможно, самом чистом), либо в global.asax.cs в Application_BeginRequest или в каком-то событии типа BasePage, например OnInit, я выполняю проверку по запрошенному URL-адресу с известной строкой, которую я хочу использовать:

public class SeoUrls : IHttpModule
{
  #region IHttpModule Members

  public void Init(HttpApplication context)
  {
      context.PreRequestHandlerExecute += OnPreRequestHandlerExecute;
  }

  public void Dispose()
  {
  }

  #endregion

  private void OnPreRequestHandlerExecute(object sender, EventArgs e)
  {
    HttpContext ctx = ((HttpApplication) sender).Context;
    IHttpHandler handler = ctx.Handler;

    // Only worry about redirecting pages at this point
    // static files might be coming from a different domain
    if (handler is Page)
    {
      if (Ctx.Request.Url.Host != WebConfigurationManager.AppSettings["FullHost"])
      {
        UriBuilder uri = new UriBuilder(ctx.Request.Url);

        uri.Host = WebConfigurationManager.AppSettings["FullHost"];

        // Perform a permanent redirect - I've generally implemented this as an 
        // extension method so I can use Response.PermanentRedirect(uri)
        // but expanded here for obviousness:
        response.AddHeader("Location", uri);
        response.StatusCode = 301;
        response.StatusDescription = "Moved Permanently";
        response.End();
      }
    }
  }
}

Затем зарегистрируйте класс в файле web.config:

<httpModules>
  [...]
  <add type="[Namespace.]SeoUrls, [AssemblyName], [Version=x.x.x.x, Culture=neutral, PublicKeyToken=933d439bb833333a]" name="SeoUrls"/>
</httpModules>

Этот метод работает для нас хорошо.

Ответ 2

Здесь есть сообщение в блоге Stackoverflow.

http://blog.stackoverflow.com/2008/06/dropping-the-www-prefix/

Цитирование Jeff:

Вот правило IIS7 для удаления WWW префикс из всех входящих URL-адресов. Сокращение и вставьте этот фрагмент XML в свой Файл web.config в

<system.webServer> / <rewrite> / <rules>

<rule name="Remove WWW prefix" >
<match url="(.*)" ignoreCase="true" />
<conditions>
<add input="{HTTP_HOST}" pattern="^www\.domain\.com" />
</conditions>
<action type="Redirect" url="http://domain.com/{R:1}"
    redirectType="Permanent" />
</rule>

Или, если вы предпочитаете использовать www префикс, вы также можете сделать это:

<rule name="Add WWW prefix" >
<match url="(.*)" ignoreCase="true" />
<conditions>
<add input="{HTTP_HOST}" pattern="^domain\.com" />
</conditions>
<action type="Redirect" url="http://www.domain.com/{R:1}"
    redirectType="Permanent" />
</rule>

Ответ 3

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

Вот мое правило модуля Rewrite URL-адреса IIS7 (тип действия здесь на самом деле является 301 перенаправлением, а не "переписывать" ). Отлично работает:

<rule name="Add WWW prefix" >
  <match url="(.*)" ignoreCase="true" />
  <conditions>
   <add input="{HTTP_HOST}" negate="true" pattern="^www\.(.+)$" />
  </conditions>
  <action type="Redirect" url="http://www.{HTTP_HOST}/{R:1}" 
       appendQueryString="true" redirectType="Permanent" />
</rule>

Ответ 4

Чтобы ответить на этот вопрос, мы должны сначала напомнить определение WWW:

Всемирная паутина: п. Сокращенный WWW

  • Полный набор документов, находящихся на всех интернет-серверах, использующих протокол HTTP, доступных пользователям через простую систему "точка-и-клик".
  • n: коллекция интернет-сайтов, которые предлагают текстовые и графические и звуковые и анимационные ресурсы через протокол гипертекстовой передачи. По умолчанию все популярные веб-браузеры используют протокол HTTP. При этом программное обеспечение добавляет "http://" на запрошенный URL-адрес и автоматически подключается к HTTP-серверу на порту 80. Почему тогда многие серверы требуют, чтобы их веб-сайты связывались через субдомен www? Почтовые серверы не требуют отправки писем по адресу [email protected] Аналогичным образом, веб-серверы должны разрешать доступ к своим страницам, хотя основной домен, если не требуется конкретный поддомен.

Вкратце, использование субдомена www является избыточным и трудоемким для общения. Интернет, средства массовой информации и общество обойдутся без него.

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

Веб-сервер Apache:

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

Windows Server/IIS: Нет способа.

Вы можете использовать Url Rewriter из Code Plex. С тем же синтаксисом.

RewriteCond %{HTTP_HOST} !^(www).*$ [NC]
RewriteRule ^(.*)$ http://www.%1$1 [R=301]

Источник

Ответ 5

Обычно это выполняется вашим веб-сервером непосредственно в конфигурации. Как вы упомянули, файл .htaccess делает это для веб-сервера Apache - он не имеет ничего общего с PHP. Поскольку вы используете ASP, это почти наверняка означает, что ваш сервер IIS. Я знаю, что есть способ настроить это прямо с IIS, но я не знаю, что это такое. Вам может помочь в поиске, зная, что вы должны искать в Google событиях, связанных с "перенаправлением IIS", а не "перенаправление ASP".

Тем не менее, вы можете сделать это на PHP и почти наверняка на ASP, но вам придется ударить по любому URL-адресу в неправильном домене, вызывая ASP script, который выполняет операцию перенаправления (используя соответствующие вызовы API или путем установки заголовков напрямую). Это потребует некоторой перезаписи URL-адресов или со стороны сервера, так что все URL-адреса на неправильном хосте обрабатываются вашим script... просто сделайте это прямо на сервере в первую очередь:)

Ответ 6

Мы сделали это на IIS 6 довольно просто. Мы по существу создали второй виртуальный сервер, который ничего не имел на нем, чем пользовательская страница с 404 страницами .aspx. Эта страница поймала любые запросы на WHATEVERSERVER.com/whateverpage.aspx и перенаправлена ​​на реальный сервер, изменив URL-адрес на www.whateverserver.com/whateverpage.aspx.

Довольно проста в настройке и имеет то преимущество, что она будет работать с любыми доменами, входящими в нее (если у вас есть несколько доменов, например), без необходимости устанавливать дополнительные правила для каждого из них. Поэтому любые запросы на www.myoldserver.com/xxx также будут перенаправлены на www.whateverserver.com/xxx

В IIS 7 все это можно сделать с помощью компонента записи URL-адресов, но мы предпочитаем, чтобы перенаправления на этом виртуальном сервере не выполнялись.

Ответ 7

Если вы используете IIS 7, просто перейдите к перезаписи URL и добавьте правило канонического имени домена.

P.S. Чтобы убедиться, что вы перенаправляетесь с сайта domain.com на www.domain.com

Ответ 8

Эта версия будет:

  • Сохранять http/https входящего запроса.
  • Поддержка различных хостов в случае необходимости (например, приложение с несколькими арендаторами, которое отличает арендатора по домену).

<rule name="Redirect to www" stopProcessing="true">
  <match url="(.*)" />
  <conditions trackAllCaptures="true">
    <add input="{CACHE_URL}" pattern="^(.+)://" />
    <add input="{HTTP_HOST}" negate="true" pattern="^www\.(.+)$" />
  </conditions>
  <action type="Redirect" url="{C:1}://www.{HTTP_HOST}/{R:1}" />
</rule>