我目前有一个ASP .NET MVC网站,有两个指向它的域名(例如www.domainA.com和www.domainB.com)。即使访问www.domainB.com,我也想更改所有链接以使用www.domainA.com。
我的所有网址都是由内置的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
);
}
路线正在运行(即没有崩溃我的网站)但是当我运行它时,我的网址只会附加到http://localhost ...例如,我得到“http://localhost:56822/http:/www.domainA.com/Home/Index”。
有谁知道为什么这不起作用?
答案 0 :(得分:5)
如果您使用的是IIS 7,最好在 Web服务器级别实现此功能。
这样,正确的状态代码将返回到HTTP标头中的浏览器,您的MVC应用程序可以处理自己的路由,而不必担心在大多数情况下是Web服务器工作的域和主机名。
有两种方法可以实现这个目标
<强> 1。通过IIS管理控制台
在IIS控制台中打开您的网站,然后选择URL Rewrite并按照以下步骤操作:
<强> 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>
此方法将确保您的子目录已映射,并且您的网站仍然保持搜索引擎友好,并生成正确的响应代码。
答案 1 :(得分:0)
为什么不直接将域名转发到域名?我相信大多数注册商都会将您的域名转发给另一个域名。
答案 2 :(得分:0)
有几种方法可以做到这一点。
在IIS7中,正如其他人所提到的,您可以使用内置的URL Rewrite模块轻松完成此操作。参见
http://www.dotnetexpertguide.com/2011/08/iis-7-redirect-domaincom-to.html
或者,在web.config中添加类似的东西:
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Redirect to WWW" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTP_HOST}" pattern="^yoursite.com$" />
</conditions>
<action type="Redirect" url="http://www.yoursite.com/{R:0}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
(来自this site)
在 IIS6 中,只需为辅助域添加新网站,然后在“主目录”标签中将其设置为指向您的主域:
这将导致对第二个站点/辅助域的主机头的所有请求重定向到主域,包括原始站点中包含的任何路径和url参数。
请注意,如果您不使用其中一个顶级选项,则可能会遇到Cookie问题。浏览器不喜欢将“www.a.com”的cookie发送到“www.b.com”。