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 in stuff in .NET MVC, I want to a url starting with www to be automatically redirected to a non-www url using the MVC framework.
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>
:
<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.
<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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With