我有一个在ASP.NET MVC(V 1.0)上编写的应用程序。该应用程序在IIS7上运行,DNS由GoDaddy提供。
我想将http://mydomain.com/ctrlr/act/value的任何请求转发到此表单的网址:http://WWW.mydomain.com/ctrlr/act/value
基本上,如果有人试图访问http://mydomain.com
,我想将WWW添加到主机名最好的方法是什么?
答案 0 :(得分:11)
我认为您会找到适合此question
的答案我同意你强行使用www的想法,好像SO决定use it我确实相信他们在调整cookie的性能并且不得不使用sstatic.net而不是images.stackoverflow.com时后悔了。说。
为了节省您的重定向,这是您需要做的事情。
这是将WWW前缀添加到所有传入URL的IIS7规则。将此XML片段剪切并粘贴到
下的web.config文件中<system.webServer> / <rewrite> / <rules>
<rule name="Add WWW prefix" >
<match url="(.*)" ignoreCase="true" />
<conditions>
<add input="{HTTP_HOST}" pattern="^domain\.com" />
</conditions>
<action type="Redirect" url="http://www.domain.com/{R:1}"
redirectType="Permanent" />
</rule>
答案 1 :(得分:1)
您可以使用Code Plex中的Url Rewriter。您可以通过执行以下操作强制所有内容到www.domain.com:
RewriteCond %{HTTP_HOST} !^(www).*$ [NC]
RewriteRule ^(.*)$ http://www.%1$1 [R=301]
或者,如果您想让它更具针对您的域
RewriteCond %{HTTP_HOST} !^www.mydomain.com$ [NC]
RewriteRule ^(.*)$ http://www.mydomain.com$1 [R=301]
这也支持mod_rewrite提供的一大堆其他重写函数。
答案 2 :(得分:0)
刚刚在单独的帖子中回答了这个问题,但我会重新发布
我选择在应用级别执行此操作,而不是IIS。这是我写的一个快速动作过滤器。只需在项目中的某处添加类,然后就可以将[RequiresWwww]添加到单个动作或整个控制器中。
public class RequiresWww : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpRequestBase req = filterContext.HttpContext.Request;
HttpResponseBase res = filterContext.HttpContext.Response;
//IsLocal and IsLoopback i'm not too sure on the differences here, but I have both to eliminate local dev conditions.
if (!req.IsLocal && !req.Url.Host.StartsWith("www") && !req.Url.IsLoopback)
{
var builder = new UriBuilder(req.Url)
{
Host = "www." + req.Url.Host
};
res.Redirect(builder.Uri.ToString());
}
base.OnActionExecuting(filterContext);
}
}
然后
[RequiresWwww]
public ActionResult AGreatAction()
{
...
}
或
[RequiresWwww]
public class HomeController : BaseAppController
{
..
..
}
希望有人帮助。干杯!