我目前有一个 ASP .NET MVC 站点,有两个域指向它(例如 www.domainA.com 和 www.domainB.com)。我想更改所有链接以使用 www.domainA.com,即使访问了 www.domainB.com。
我所有的 url 都是由内置的 Url.Action 和 Html.ActionLink 方法生成的。
我按照 previous question 中的说明进行操作但我不能完全让它工作。
这是我的自定义路线:
public class MultipleDomainRoute : System.Web.Routing.Route
{
public MultipleDomainRoute(string url, IRouteHandler routeHandler)
: base(url, routeHandler)
{
}
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
VirtualPathData path = new VirtualPathData(this, "http://www.domainA.com/" + values["controller"] + "/" + values["action"]);
return path;
}
}
这是我的自定义路由处理程序:
class MyRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return new MvcHandler(requestContext);
}
}
这是我的 RegisterRoutes 方法:
public static void RegisterRoutes(RouteCollection routes)
{
routes.Add(new MultipleDomainRoute("{controller}/{action}/{id}", new MyRouteHandler()));
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
该路由正在运行(即不会使我的站点崩溃)但是当我运行它时,我的 url 只是附加到 http://localhost ...例如,我得到“http://localhost:56822/http:/www.domainA.com/Home/Index”。
有谁知道为什么这不起作用?
最佳答案
如果您使用的是 IIS 7,最好在网络服务器级别实现它。
这样,正确的状态代码将在 HTTP header 中返回给浏览器,您的 MVC 应用程序可以处理自己的路由,而不必担心域名和主机名,在大多数情况下,这是网络服务器的工作。
有两种方法可以实现这一点
<强>1。通过 IIS 管理控制台
在 IIS 控制台中打开您的网站并选择 URL Rewrite 并按照以下步骤操作:
- 创建新规则并将匹配 URL 设置为通配符并将模式输入为您的辅助域
- 添加一个条件,其中 {HTTP_HOST} 等于网站的辅助域。
- 将“操作类型”设置为重定向,然后输入您希望重定向到的模式。在这种情况下,“http://mysite.com{R:1}”会将 IP 地址之后的所有内容映射到其等效域,因此 mysite.net/mycontent 将重定向到 mysite.com/mycontent
<强>2。在你的 web.config 中
<system.webServer>
<rewrite>
<rules>
<rule name="Redirect to mydomain.com" stopProcessing="true">
<match url=".*"/>
<conditions>
<add input="{HTTP_HOST}" pattern="^(www.)?mydomain.net"/>
</conditions>
<action type="Redirect" url="http://www.mydomain.com/{R:0}"/>
</rule>
</rules>
</rewrite>
</system.webServer>
这种方法将确保您的子目录被映射并且您的站点保持搜索引擎友好,并生成适当的响应代码。
关于c# - 如何强制将单个域用于 ASP.NET MVC 站点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9332599/