Как заставить один домен использоваться для сайта ASP.NET MVC? - PullRequest
1 голос
/ 17 февраля 2012

В настоящее время у меня есть сайт ASP .NET MVC, на который указывают два домена (например, www.domainA.com и www.domainB.com).Я хотел бы изменить все свои ссылки для использования www.domainA.com, даже если www.domainB.com посещен.

Все мои URL-адреса генерируются встроенными Url.Action и Html.ActionLink.методы.

Я следовал инструкциям в предыдущем вопросе , но не могу заставить его работать.

Вот мой собственный маршрут :

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".

У кого-нибудь естьИдея, почему это не работает?

Ответы [ 3 ]

5 голосов
/ 17 февраля 2012

Если вы используете IIS 7, возможно, лучше реализовать это на уровне веб-сервера .

Таким образом, правильный код состояния будет возвращен браузеру в заголовке HTTP, и ваше приложение MVC сможет справиться со своей собственной маршрутизацией, не беспокоясь о доменах и именах хостов, что в большинстве случаев является работой веб-сервера.

Есть два способа достичь этого

1. Через консоль администрирования IIS

Откройте свой веб-сайт в консоли IIS, выберите URL Rewrite и выполните следующие действия:

  1. Создайте новое правило, задайте для URL-адреса совпадения подстановочный знак и введите шаблон в качестве дополнительного домена
  2. Добавить условие, где {HTTP_HOST} равно второстепенному домену сайта.
  3. Установите «тип действия» для перенаправления и введите шаблон, на который вы хотите перенаправить. «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>

Этот подход гарантирует, что ваши подкаталоги сопоставлены, а ваш сайт остается дружественным для поисковых систем с генерированием правильных кодов ответов.

0 голосов
/ 17 февраля 2012

Есть несколько способов сделать это.

В IIS7, как уже упоминали другие, вы можете сделать это довольно легко с помощью встроенного модуля перезаписи URL. См

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>

этого сайта )

В IIS6 просто добавьте новый сайт для вторичного домена и на вкладке «Домашний каталог» установите его так, чтобы он указывал на основной домен:

enter image description here

Это приведет к тому, что все запросы к заголовкам узла для второго сайта / вторичного домена будут перенаправлены на первичный домен, включая любые пути и параметры URL, которые были включены в исходный сайт.

Обратите внимание, что если вы не используете один из этих параметров верхнего уровня, у вас, вероятно, будут проблемы с файлами cookie. Браузеры не любят отправлять файлы cookie с сайта «www.a.com» на сайт «www.b.com».

0 голосов
/ 17 февраля 2012

Почему бы просто не переслать домен B в домен A? Я полагаю, что большинство регистраторов позволяют пересылать один домен на другой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...