将www链接路由到.net mvc中的非www链接

时间:2008-11-16 06:52:49

标签: .net asp.net-mvc url-rewriting

似乎.NET MVC中内置的友好路由库,它可以让我们做这样的事情。

如果我对.NET MVC内置内容的要求不明显,我想用www开头的url自动重定向到使用MVC框架的非www url。

3 个答案:

答案 0 :(得分:8)

您可以使用IIS 7 URL Rewriting module

您可以从IIS进行设置,也可以将web.config放在<system.webServer>下的<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> 下:

www到非www

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(); } } 上进行此重定向:

<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>

但请记住@Sam所说的look here for more info


非www到www

{C:0}

制作与您的主机匹配的正则表达式模式,并使用1, 2, ..., N {{1}}来获取匹配的组。

答案 1 :(得分:2)

有许多方法可以将www重定向从www重定向到非www。我更喜欢在某些项目中将此重定向逻辑保留在ASP.NET级别(即在我的应用程序中),但其他项目需要更好的性能,例如IIS7 URL重写。

它是discussed on the ASP.NET forums,我选择在每个控制器上使用WwwFilter。这对我有用,没问题。

答案 2 :(得分:0)

尝试将此添加到 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"));
    }

它的工作和测试。