MVC 4에 웹 사이트를 작성 중이며 일부 질문을 라우팅하기 위해 Stack Exchange 스타일을 복제하고 싶습니다. 예를 들면 :영구 리디렉션이 슬러그를 수정하거나 추가하는 것을 피할 수 있습니까?
stackoverflow.com/questions/15191392 및
stackoverflow.com/questions/15191392/not-the-real-title 및
stackoverflow.com/questions/15191392/can-i-avoid-this-redirect-to-fix-or-add-a-slug
같은 질문에 대한 모든 경로와 URL을 수정합니다. 라우팅을 위해 불필요한 경우에도 슬러그가 항상 나타나고 정확하도록하고 싶습니다.
이 내 현재의 구현 :
routes.MapRoute("Item", "{id}/{slug}/{action}",
new {controller = "Item", action = "Index", slug = UrlParameter.Optional},
new { id = @"\d+", slug = @"(?-i)[-a-z]*", action = @"(?-i)(|[A-Z][a-zA-Z]*)" });
routes.MapRoute("Default", "{controller}/{action}/{id}",
new {controller = "Home", action = "Index", id = UrlParameter.Optional});
ItemController.cs
에서 : 슬러그가 누락/잘못되면
public ActionResult Index(int id, string slug = null)
{
var item = GetItem(id);
var itemSlug = ToSlug(item.Title);
if (slug != itemSlug)
{
return RedirectToActionPermanent("Index", new {id, slug = itemSlug});
}
return View(item);
}
내 우려가 리디렉션입니다. 이 구현은보기로 확인하는 데 필요한만큼 두 배의 작업 (ID로 항목을 쿼리하고 제목이 슬쩍)을 요구할 수 있습니다. 더 나쁜 것은 각 작업에 대해 리디렉션 코드를 복제해야한다는 것입니다.
코드 복제, 성능 및 SEO 영향과 관련하여 사용할 수있는 더 나은 구현이 있습니까?
: 검색 결과 페이지에
여기에 태그 및 구현에 대한 자세한 내용을보실 수 있습니다 왜냐하면 제목이 바뀌면 URL이 그대로 유지되기 때문입니다. 또한 ToSlug가 변경 될 수 있습니다. – usr
@usr, 분명히 충분히 신중하게 읽지는 않았습니다. 나는 ** ** 슬러그가 DB에 있다고 가정했다. –
@usr 왜 슬러그를 똑같이 유지하고 싶습니까? 슬러그의 정보가 정보가 아닌가? 이전 URL은 계속 작동하지만 새 슬러그가있는 URL로 영구적으로 리디렉션됩니다. – dlras2