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

jde*_*tor 4 .net asp.net-mvc url-rewriting

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

如果我想用.NET MVC中的内置东西并不明显,我希望从www开始的url会自动重定向到使用MVC框架的非www url.

Bru*_*oLM 8

您可以使用IIS 7 URL重写模块

您可以从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>
Run Code Online (Sandbox Code Playgroud)

或者,您可以在以下位置进行此重定向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();
    }
}
Run Code Online (Sandbox Code Playgroud)

但请记住@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>
Run Code Online (Sandbox Code Playgroud)

制作正则表达式模式以匹配您的主机并用于{C:0} 1, 2, ..., N获取匹配的组.