2011-09-07 2 views
1

내부 (URL 만 사이트 링크) URL 단축 서비스를 만들고 있습니다. .ly 또는 tinyurl 비트와 같은 서비스를 사용하고 단축 링크를 Facebook에 게시하면 대상의 미리보기 (전체 링크)가 표시됩니다. 내 페이지로이 작업을 시도하면 리디렉션 페이지가 표시됩니다. 예를 http://youtu.be/2323를 들어URL Shortener가 대상 페이지를 미리보기하지 않습니다.

http://www.youtube.com/watch?v=123456에 매핑 대신 데이터베이스의 실제 페이지의 http://exam.pl/Redirect.aspx를 표시합니다 내 링크

http://exam.pl/2323 것이다. 서버 자체 또는 다른 곳에서 리디렉션해야합니까?

감사

UPDATE : 아래의 대답 같은 HttpHandler를 함께 해결. Response.Redirect는 자동으로 302 상태를 보내고 301은 더 정확하기 때문에 응답을 변경했습니다.

context.Response.Status = "301 Moved Permanently"; 
context.Response.AddHeader("Location", httplocation); 
context.Response.End(); 

답변

1

나는 리디렉션을 수행하는 실제 페이지 대신에 HTTP 처리기를 사용하는 것이 좋습니다 http://support.microsoft.com/kb/308001

나는 또한 당신이 적절한 301 HTTP 상태를 제공하는 것이 좋습니다 http://en.wikipedia.org/wiki/HTTP_301

업데이트 : (이 메모리에서 purley입니다 그대로 컴파일 할 수 없음)

public class IISHandler1 : IHttpHandler 
    { 
     public bool IsReusable 
     { 
      get { return true; } 
     } 

     public void ProcessRequest(HttpContext context) 
     { 
      string url = content.Request.Url.ToString(); 
      string newUrl = Translate(url); 
      context.Response.ResponseCode = 301; 
      context.Response.Redirect(newUrl); 
     } 

    } 

모듈은 처리기 이후에 처리되므로 한 번만 처리해야합니다. dler. 아마도 처리 할 수 ​​없다면 그냥 무시하고 통과 시키십시오.

+0

좋은 생각처럼 들리지만 모듈에서 처리기로 요청하는 데 문제가 있습니다. 내 모듈은 URL 형식이 일치하면 현재 aspx 페이지로 server.transfer를 수행합니다. 어떻게 그것을 HttpHandler로 전송할 수 있습니까? –

+0

내 대답을 업데이트하십시오. 모듈은 핸들러 이후에만 처리됩니다. 사용중인 코드를 처리기의 ProcessRequest 메서드로 옮기십시오. –

+0

감사합니다. 나는 그것이 필요 이상으로 힘들게 만들고있었습니다. 핸들러는 잘 작동합니다. 응답 부분을 조금 변경하고 내 게시물을 업데이트했습니다. –

관련 문제