我有一个ASP.NET MVC 4 Web应用程序。它有一个默认主页,可处理对http://www.mydomain.com
以及http://mydomain.com
的所有请求。我还有一个可以通过www.mydomain.com/Foo/Hello/
访问的MVC区域设置(其中“Foo”是区域的名称,“Hello”是该区域的控制器)。
如果有人立即向foo.mydomain.com
发出请求,它会将它们路由到默认的主页控制器。我希望所有对foo子域根的请求(例如,没有指定特定区域/控制器)自动重新路由到/foo/hello/
控制器。
此外,我希望通过www子域向“Foo”区域的任何请求被重定向到“foo”子域。即。我希望www.mydomain.com/Foo/Goodbye
的所有请求都自动重定向到foo.mydomain.com/Foo/Goodbye
我当然看过很多地方和lots of other samples / questions,但似乎都没有解决我的确切问题。
我不确定我是否应该解决路线,路线限制,路线处理程序等问题。
此外:此应用程序托管在 Windows Azure云服务 上,因此我无法完全控制IIS设置。
答案 0 :(得分:1)
在您的Web服务器中,您站点的应用程序池必须具有集成管道模式,如下所示:
或者您可以通过以下应用程序池的基本设置找到它。
然后我在我的示例MVC应用程序中添加了HttpModule
<强> HTTP模块强>
public class MyModule1 : IHttpModule
{
public void Init(HttpApplication context)
{
context.BeginRequest += context_BeginRequest;
}
public void Dispose() { }
void context_BeginRequest(object sender, EventArgs e)
{
if (!System.Web.HttpContext
.Current
.Request
.Url
.Authority
.Contains("foo.mydomain.com"))
{
string URL =
(System.Web.HttpContext.Current.Request.Url.Scheme + "://" +
"foo.mydomain.com" +
HttpContext.Current.Request.Url.AbsolutePath +
HttpContext.Current.Request.Url.Query);
System.Web.HttpContext.Current.Response.Clear();
System.Web.HttpContext.Current.Response.StatusCode = 301;
System.Web.HttpContext.Current.Response.Status
= "301 Moved Permanently";
System.Web.HttpContext.Current.Response.RedirectLocation = URL;
System.Web.HttpContext.Current.Response.End();
}
}
}
然后我为我的HttpModule添加了一些代码n Web.config
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules>
<add name="MyModule1" type="rewrite.MyModule1" />
</modules>
<handlers>
<remove name="UrlRoutingHandler" />
</handlers>
</system.webServer>
<system.web>
<httpModules>
<add name="MyModule1" type="rewrite.MyModule1" />
</httpModules>
</system.web>
然后在主机文件中添加了以下代码。
127.0.0.1 foo.mydomain.com
然后我为我的网站添加了Bindings
答案 1 :(得分:0)
您可以将URL Rewrite模块用于IIS7 +以实现您所描述的内容。文档在这里:URL Rewrite Module Configuration Reference。
简化的例子是:
添加您的web.config,system.webServer
节点rewrite
部分:
...
<rewrite>
<rules>
<rule name="Redirect mydomain.com/foo to foo.mydomain.com/foo" patternSyntax="Wildcard" stopProcessing="true">
<match url="foo" negate="false" />
<conditions>
<add input="{HTTP_HOST}" pattern="mydomain.com" />
</conditions>
<action type="Redirect" url="http://foo.mydomain.com/{R:0}" redirectType="Temporary" />
</rule>
<rule name="Rewrite foo.mydomain.com to access /foo/hello" patternSyntax="Wildcard" stopProcessing="true">
<match url="" />
<conditions>
<add input="{HTTP_HOST}" pattern="foo.mydomain.com" />
</conditions>
<action type="Rewrite" url="/foo/hello" />
</rule>
</rules>
</rewrite>
</system.webServer>
您还可以使用GUI在IIS管理器中编辑/查看这些规则。单击您的网站,然后转到IIS部分/ URL重写模块。 Bellow你可以在GUI中看到第一条规则。