You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MVC Web应用绑定新域名www.domain2.com,访问时返回指定视图且URL不变

解决MVC多域名绑定并隐藏目标路由的问题

嘿,我来帮你搞定这个问题!你之前的路由配置没生效,核心原因是MVC路由默认只处理域名后的URL路径部分,你直接把域名写在路由的url参数里,路由系统根本认不出来。下面给你两种靠谱的实现方案:

方案一:自定义域名路由约束(推荐,更符合MVC路由规范)

这种方式通过自定义路由约束,让特定域名的根请求自动路由到Category/Cars,同时保持URL不变。

第一步:创建路由约束类

新建一个类实现IRouteConstraint接口,用来判断请求的域名是否匹配:

public class DomainConstraint : IRouteConstraint
{
    private readonly string _targetDomain;

    public DomainConstraint(string targetDomain)
    {
        _targetDomain = targetDomain;
    }

    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
    {
        // 忽略大小写匹配域名
        return string.Equals(httpContext.Request.Url.Host, _targetDomain, StringComparison.OrdinalIgnoreCase);
    }
}

第二步:配置路由

在RouteConfig.cs里,把这个约束加到路由规则中,注意要把这条路由放在默认路由前面:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    // 针对www.domain2.com的专属路由
    routes.MapRoute(
        name: "Domain2_Cars",
        url: "", // 匹配根路径(www.domain2.com/)
        defaults: new { controller = "Category", action = "Cars" },
        constraints: new { domain = new DomainConstraint("www.domain2.com") }
    );

    // 原有的默认路由
    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

方案二:全局请求重写(快速实现)

如果不想写自定义约束,可以在Global.asax的Application_BeginRequest事件里直接处理请求路径重写,内部指向目标Action但外部URL不变:

protected void Application_BeginRequest()
{
    string requestHost = Request.Url.Host;
    // 判断域名是www.domain2.com,且请求的是根路径
    if (string.Equals(requestHost, "www.domain2.com", StringComparison.OrdinalIgnoreCase) 
        && Request.Path.Equals("/", StringComparison.OrdinalIgnoreCase))
    {
        // 内部重写路径到Category/Cars,客户端URL保持不变
        Context.RewritePath("/Category/Cars");
    }
}

关键前提检查

不管用哪种方案,先确保:

  • 你的托管服务器(比如IIS)已经把www.domain2.com绑定到这个MVC应用上了
  • 域名解析已经指向你的服务器IP
  • 如果用HTTPS,证书要包含www.domain2.com(可以用多域名证书或通配符证书)

为什么你之前的配置无效?

你之前的两种写法都是把域名当作URL路径的一部分(比如www.domain2.com当作路径片段),但MVC路由的url参数只负责解析域名后面的路径部分(比如www.domain.com/Category/Cars里的Category/Cars),所以自然不会触发你想要的路由规则。

内容的提问来源于stack exchange,提问作者Patrick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:38:19