301 перенаправляет и сопоставляет старые maproutes новым
У меня есть 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 перенаправляет старые maproute s со старого сайта. Я думал, что это может быть сделано в качестве проверки в контроллере / действии нового веб-сайта или в перенаправлении карт как-то, у кого-нибудь есть какие-нибудь идеи?
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 этой структуры, не нарушая их (одно явное преимущество перед выполнением этого в действии контроллера).