У меня есть приложение ASP.NET MVC 3, в котором пользователи могут публиковать предложения в духе "бла бла , было бы лучше, если бы yada yada yada".
Для страницы с описанием предложений я определил хороший SEO-дружественный маршрут следующим образом:
routes.MapRoute(null, "suggestion/{id}/{it}/would-be-better-if-{if}",
new { controller = "suggestion", action = "details" });
Как видите, я хочу, чтобы часть "было бы лучше, если бы" была исправлена.
Этот маршрут отлично работает для любого старого предложения и генерирует ссылки типа suggestion/5/this-site/would-be-better-if-it-had-a-iphone-application
, а нажатие на ссылку фактически запрашивает соответствующую страницу с подробностями.
Мой друг, который, по иронии судьбы, является тестером, сумел невольно опубликовать предложение, которое фактически нарушает маршрут: " Этот сайт был бы лучше, если бы" было лучше, если бы "был всегда выровнен в середине".
Ссылка для этого предложения:
/suggestion/84/this-site/would-be-better-if-would-be-better-if-was-always-alligned-in-the-middle
.
Я попробовал Отладчик маршрутизации Фила Хаака и подтвердил, что маршрут на самом деле будет работать до suggestion/84/this-site/would-be-better-if-would-be-better-if-
, поэтому второй вариант "будет лучше, если" действительно будет принят; добавление чего-либо после этого фактически приведет к тому, что URL не будет совпадать ни с одним маршрутом (спасибо Омару - см. комментарии- за помощь) .
Пожалуйста, имейте в виду, что Я действительно не хочу менять определение маршрута , так как я думаю, что это так хорошо, как я могу управлять в этом случае, с точки зрения SEO.
Итак, Почему , имеющий текст, равный фиксированной части маршрута, не позволяет ссылке соответствовать маршруту? почему нарушает маршрут?
Меня на самом деле больше интересует почему , так как я верю, что понимание причины приведет к решению или, по крайней мере, правильному пониманию довольно интересной проблемы.