ASP.net MVC站点:重定向全部;非WWW";请求访问WWW
最近,我将一个ASP.net站点迁移到ASP.net MVC站点。之前有两个主机头,一个是mydomain.com,另一个是www.mydomain.com。我的搜索引擎优化说,你应该只使用一个网址“www.domain.com”的搜索引擎优化优势 我正在寻找一个选项做301永久重定向所有mydomain.com请求到www.mydomain.comASP.net MVC站点:重定向全部;非WWW";请求访问WWW,asp.net,asp.net-mvc,routing,seo,iis-6,Asp.net,Asp.net Mvc,Routing,Seo,Iis 6,最近,我将一个ASP.net站点迁移到ASP.net MVC站点。之前有两个主机头,一个是mydomain.com,另一个是www.mydomain.com。我的搜索引擎优化说,你应该只使用一个网址“www.domain.com”的搜索引擎优化优势 我正在寻找一个选项做301永久重定向所有mydomain.com请求到www.mydomain.com 该网站托管在IIS6中,并在ASP.net MVC 4中开发。您可以从web.config文件中执行此操作 <system.webServe
该网站托管在IIS6中,并在ASP.net MVC 4中开发。您可以从web.config文件中执行此操作
<system.webServer>
<rewrite>
<rules>
<rule name="Redirect to WWW" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTP_HOST}" pattern="^example.com$" />
</conditions>
<action type="Redirect" url="http://www.example.com/{R:0}"
redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
您可以在IIS中使用config或Url Rewriter,但我发现最好的方法就是将一些代码放入
应用程序中_BeginRequest()
到您的global.asax.cs
中,如下所示:
var HOST = "www.mydomain.com";
if ( !Request.ServerVariables[ "HTTP_HOST" ].Equals(
HOST,
StringComparison.InvariantCultureIgnoreCase )
)
{
Response.RedirectPermanent(
( HttpContext.Current.Request.IsSecureConnection ? "https://" : "http://" )
+ HOST
+ HttpContext.Current.Request.RawUrl );
}
因为您是在代码中执行此操作的,所以您可以在每个请求的基础上拥有所需的任何逻辑。不幸的是,URL重写模块不适用于IIS6(仅适用于IIS7或更高版本)。您考虑过创建自己的HttpModule吗 或者,您也可以使用以下第三方解决方案之一: (需要IIS 7或更高版本) 从 (与上述解决方案类似,但不要求您添加自己的域名。)
更多关于httpRedirect的信息可以在这里找到
这是一个很好的回答,@Tommy;看不到一行c#。您必须使用IIS7或更高版本才能使用URL重写模块。如果你至少有IIS7,这是一种方法,但它对IIS6不起作用。@johntrepresener-这是使用IIS URL重写模块,只是从应用程序的配置文件。如果您有IIS 7,并且可以使用此方法,则通过IIS管理器控制台或使用web.config应该以相同的方式运行。如果使用.NET路由功能,则必须将请求传递到.NET管道,这可能会导致性能略有下降。我只会在无法使用重写模块IMHO的情况下使用.NET路由。@Tommy信不信由你,在过去的两年里,我不得不引入一些政策,因为我在保存我的更改时收到了一个错误,我不能再在答案中使用mydomain.com了:D See.@MichalHosala-这也是一个有充分理由支持的政策+我不知道为什么要把它挖出来。酷!我在配置中尝试了所有方面的规则,但在IIS 7中没有成功。但这个解决方案对我有效。谢谢。
<configuration>
<system.webServer>
<rewrite>
<rules>
<clear />
<rule name="WWW Rewrite" enabled="true">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" negate="true"
pattern="^www\.([.a-zA-Z0-9]+)$" />
</conditions>
<action type="Redirect" url="http://www.{HTTP_HOST}/{R:0}"
appendQueryString="true" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>