如何删除www。来自传入请求?我是否需要设置301重定向或只是重写路径?无论哪种方式,最好的方法是什么?
谢谢!
答案 0 :(得分:7)
我认为使用IIS的URL重写模块更合适。
如果您可以访问IIS的管理工具,则可以在站点设置的“IIS”部分中设置用于设置重写规则的GUI。如果您从那里选择“添加规则...”(在右栏菜单中),请选择SEO部分中的“规范域名”规则,几乎完全自动化设置规则。
如果没有,重写规则在web.config中将如下所示:
<system.webServer>
<rewrite>
<rules>
<rule name="CanonicalHostNameRule1">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="^yourdomain\.com$" negate="true" />
</conditions>
<action type="Redirect" url="http://yourdomain.com/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
答案 1 :(得分:2)
您可以处理Application.BeginRequest
事件并检查Request.Host
是否以www
开头。
如果是,请调用Response.RedirectPermanent
,并传递带有请求路径和裸域的URL。
您可以通过编写
来构建新的URL"yourdomain.com" + Request.Url.PathAndQuery
答案 2 :(得分:2)
我在这里找到了一个很好的解决方案:http://nayyeri.net/remove-quotwwwquot-from-urls-in-asp-net
public class RemoveWWWPrefixModule : IHttpModule
{
public void Dispose() { }
private static Regex regex = new Regex("(http|https)://www\\.", RegexOptions.IgnoreCase | RegexOptions.Compiled);
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}
void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication application = sender as HttpApplication;
Uri url = application.Context.Request.Url;
bool hasWWW = regex.IsMatch(url.ToString());
if (hasWWW)
{
String newUrl = regex.Replace(url.ToString(),
String.Format("{0}://", url.Scheme));
application.Context.Response.RedirectPermanent(newUrl);
}
}
}
答案 3 :(得分:2)
您可以在web.config文件中使用以下重写规则。
此重写规则将删除WWW并保留尾随网址和启动协议。
<rewrite>
<rules>
<clear/>
<rule name="Canonical host name" enabled="true">
<match url="(.*)"/>
<conditions trackAllCaptures="true">
<add input="{HTTP_HOST}" negate="false" pattern="^www\.(.+)$"/>
<add input="{CACHE_URL}" pattern="^(.+)://" />
</conditions>
<action type="Redirect" url="{C:2}://{C:1}{REQUEST_URI}" appendQueryString="false" redirectType="Permanent"/>
</rule>
</rules>
</rewrite>
答案 4 :(得分:0)
这是更通用的配置,因为您可以在根目录的URL重写中编写一次(不是特定于某个应用程序池),它将自动应用于所有IIS网站,而不依赖于您的域名。
答案 5 :(得分:0)
更简单的解决方案是创建动作过滤器并用它来装饰你的动作。
public class RemovePrefix : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var url = filterContext.HttpContext.Request.Url.ToString().Replace("http://www.", "http://");
filterContext.Result = new RedirectResult(url);
}
}