Route www link to non-www link in .net mvc

前端 未结 3 1049
太阳男子
太阳男子 2021-01-01 04:40

It seems with the built in friendly routing library in .NET MVC, it would allow us to do something like this.

In case it\'s not obvious what I want to with the built

相关标签:
3条回答
  • 2021-01-01 05:18

    There are a number of ways to do the 301 redirect from the www to the not-www. I prefer to keep this redirection logic at the ASP.NET level (i.e. in my app) in some projects, but others require better performing things, like IIS7 url rewriting.

    It was discussed on the ASP.NET forums and I chose to use a WwwFilter on each controller. This has worked for me, no issues.

    0 讨论(0)
  • 2021-01-01 05:27

    You can use IIS 7 URL Rewriting module

    You can setup it from IIS or just place in your web.config the following under <system.webServer>:

    www to non-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>
    

    Alternatively you can make this redirection on 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();
        }
    }
    

    But remeber what @Sam said, look here for more info.


    non-www to 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>
    

    Make a regex pattern to match your host and use {C:0} 1, 2, ..., N to get the matching groups.

    0 讨论(0)
  • 2021-01-01 05:34

    try to add this into your 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"));
        }
    

    it works and tested.

    0 讨论(0)
提交回复
热议问题