Asp.net mvc 转发http://mydomain.com/ctrlr/act/val 到http://WWW.mydomain.com/ctrlr/act/val

Asp.net mvc 转发http://mydomain.com/ctrlr/act/val 到http://WWW.mydomain.com/ctrlr/act/val,asp.net-mvc,iis,url-rewriting,Asp.net Mvc,Iis,Url Rewriting,我有一个在ASP.NETMVC(V1.0)上编写的应用程序。应用程序在IIS7上运行,DNS由GoDaddy提供 我想将来自的任何请求转发到此表单的URL: 基本上,如果有人试图访问,我想在主机名中添加WWW 做这件事最好的方法是什么?我想你会从中找到一个合适的答案 我同意你的想法,强迫他们使用www,就好像他们决定这么做一样。我相信他们在调整Cookie的性能,不得不使用sstatic.net而不是images.stackoverflow.com时会后悔 为了避免重定向,这里是您需要做的要点

我有一个在ASP.NETMVC(V1.0)上编写的应用程序。应用程序在IIS7上运行,DNS由GoDaddy提供

我想将来自的任何请求转发到此表单的URL:

基本上,如果有人试图访问,我想在主机名中添加WWW


做这件事最好的方法是什么?

我想你会从中找到一个合适的答案

我同意你的想法,强迫他们使用www,就好像他们决定这么做一样。我相信他们在调整Cookie的性能,不得不使用sstatic.net而不是images.stackoverflow.com时会后悔

为了避免重定向,这里是您需要做的要点

以下是IIS7规则,用于将WWW前缀添加到所有传入URL。将此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>
//
您可以从代码丛使用。您可以通过执行以下操作将所有内容强制转到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提供的一系列其他重写器函数。

刚刚在单独的线程中回答了这个问题,但我将重新发布

我选择在应用程序级别执行此操作,而不是IIS。这是我写的一个快速过滤器。。只需将类添加到项目中的某个位置,然后就可以将[RequiresWW]添加到单个操作或整个控制器中

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);
        }
    }
然后


希望这能帮助别人。干杯

我认为这更像是一个问题。你应该添加标签来吸引IISER的注意力,我不会将此作为答案提交,因为这需要你更改你的开发堆栈。但以下是我如何使用Apache为我的博客解决相同问题的方法:。唯一的区别是我在准备博客而不是www。另外请注意,在我的案例中,相同的服务器为两个域名提供了答案(不知道这是否是您的案例)。@xraminx改变主意,重新回答下面的问题?简单而直接的解决方案。谢谢@dove我不认为有理由将正则表达式模式设置为
*
[RequiresWwww]
public ActionResult AGreatAction()
{
...
}
[RequiresWwww]
public class HomeController : BaseAppController 
{
..
..
}