Направьте www ссылку на ссылку без www в .net mvc - PullRequest
4 голосов
/ 16 ноября 2008

Кажется, со встроенной дружественной библиотекой маршрутизации в .NET MVC, это позволило бы нам сделать что-то вроде этого.

В случае, если не очевидно, чего я хочу от встроенного в .NET MVC, я хочу, чтобы URL-адрес, начинающийся с www, автоматически перенаправлялся на URL без www с использованием инфраструктуры MVC.

Ответы [ 3 ]

8 голосов
/ 29 января 2011

Вы можете использовать Модуль перезаписи URL IIS 7

Вы можете настроить его из IIS или просто поместить в web.config следующее под <system.webServer>:

с www на не-www

<rewrite>
  <rules>
    <rule name="Canonical" stopProcessing="true">
      <match url=".*" />
      <conditions>
        <add input="{HTTP_HOST}" pattern="^www[.](.+)" />
      </conditions>
      <action type="Redirect" url="http://{C:1}/{R:0}" redirectType="Permanent" />
    </rule>
  </rules>
</rewrite>

В качестве альтернативы вы можете сделать это перенаправление на global.asax.cs:

protected void Application_BeginRequest(object sender, EventArgs ev)
{
    if (Request.Url.Host.StartsWith("www", StringComparison.InvariantCultureIgnoreCase))
    {
        Response.Clear();
        Response.AddHeader("Location", 
            String.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Host.Substring(4), Request.Url.PathAndQuery)
            );
        Response.StatusCode = 301;
        Response.End();
    }
}

Но помните, что сказал @Sam, смотрите здесь для получения дополнительной информации .


без www на www

<rewrite>
  <rules>
    <rule name="Canonical" stopProcessing="true">
      <match url=".*" />
      <conditions>
        <add input="{HTTP_HOST}" pattern="^([a-z]+[.]net)$" />
      </conditions>
      <action type="Redirect" url="http://www.{C:0}/{R:0}" redirectType="Permanent" />
    </rule>
  </rules>
</rewrite>

Создайте шаблон регулярного выражения, соответствующий вашему хосту, и используйте {C:0} 1, 2, ..., N, чтобы получить соответствующие группы.

2 голосов
/ 16 ноября 2008

Существует несколько способов сделать перенаправление 301 с www на not-www. Я предпочитаю сохранять эту логику перенаправления на уровне ASP.NET (т.е. в моем приложении) в некоторых проектах, но для других требуются более эффективные вещи, такие как перезапись URL-адреса IIS7.

Это обсуждалось на форумах ASP.NET , и я решил использовать WwwFilter на каждом контроллере. Это сработало для меня, никаких проблем.

0 голосов
/ 02 мая 2011

попробуйте добавить это в ваш Global.asax :

if (HttpContext.Current.Request.Url.ToString().ToLower().Contains("http://YourSite.com"))
    {
            HttpContext.Current.Response.Status = "301 Moved Permanently";
            HttpContext.Current.Response.AddHeader("Location", Request.Url.ToString().ToLower().Replace("http://YourSite.com","http://www.YourSite.com"));
    }

это работает и проверено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...