301 редиректы и сопоставление старых карт с новыми

У меня есть 2 веб-сайта: старый называется www.old.com и новый называется www.new.com . Старый URL имеет постоянную переадресацию 301 на новый веб-сайт, но у нового веб-сайта другой маршрут, поэтому все не совпадает старый веб-сайт имеет следующий тип маршрута

      routes.MapRoute(
          "myroutes",
       "{controller}/{action}/{id}/{mytitle}", 
  new { controller = "buyer", action = "detail",mytitle=UrlParameter.Optional} 

        );

      old.com/buyer/detail/id/mytitle

новый сайт имеет следующее

routes.MapRoute(
          "myroutes",              
          "{mytitle}/buyer/{id}",
          new
          {
              controller = "buyer",
              action = "detail",
              id = UrlParameter.Optional,
          });

new.com/mytitle/buyer/id

Поэтому, когда кто-то переходит по старому URL-адресу, он перенаправляется на мой новый URL-адрес, но сталкивается с ошибкой 401, поскольку URL-адрес становится new.com/buyer/detail/id/mytitle, которого, конечно же, не существует. , Как я могу в моем новом URL-адресе перенаправить старые карты со старого веб-сайта. Я думал, что это можно сделать как проверку в контроллере/действии нового веб-сайта или в maproutes перенаправить его каким-то образом, у кого-нибудь есть идеи?


person user1949387    schedule 13.06.2013    source источник


Ответы (1)


Я бы не стал делать это в действии контроллера, поскольку на самом деле запрос не должен достигать вашего приложения MVC с неправильным маршрутом. Это ненужный беспорядок, когда вы можете справиться с этим с помощью правила перезаписи IIS, сопоставив группы захвата:

<rule name="OldNewRule" stopProcessing="true">
  <match url="^([a-z]+)/([a-z]+)/([0-9]+)/([a-z0-9]+)$" ignoreCase="true" />
  <action type="Redirect" url="http://www.new.com/{R:4}/buyer/{R:3}" redirectType="Permanent" />
    <conditions>
        <add input="{HTTP_HOST}" pattern="www\.old\.com" />
    </conditions>
</rule>

Здесь я предполагаю, что ваш идентификатор является числовым, а ваш заголовок буквенно-цифровым. Это захватит ваши группы захвата {R:3} и {R:4} (которые являются «id» и «mytitle» соответственно) и переформатирует их в правильную строку в новом домене.

Кроме того, требуется, чтобы исходный запрос был для домена old.com, поэтому это не сработает, если ваша существующая перезапись произойдет первой (вы, вероятно, можете полностью удалить тот, который у вас есть, или переработать его, чтобы он делал то, что делает этот). Это предотвращает перенаправление любых совпадающих маршрутов, которые фактически были направлены на новый домен, поэтому вы все еще можете иметь маршруты MVC этой структуры без их нарушения (одно явное преимущество по сравнению с выполнением этого в действии контроллера).

person Ant P    schedule 13.06.2013