2011-09-07 43 views
1

我正在創建一個內部URL鏈接(僅適用於我們網站的鏈接)URL縮短服務。當我使用像.ly或tinyurl這樣的服務,然後將縮短的鏈接發佈到Facebook時,會顯示目標的預覽(完整鏈接)。當我嘗試使用我自己的頁面進行此操作時,它會顯示重定向頁面。URL Shortener不會預覽目標頁面

例如http://youtu.be/2323將映射到http://www.youtube.com/watch?v=123456,但我的鏈接

http://exam.pl/2323將顯示http://exam.pl/Redirect.aspx,而不是在數據庫中的實際頁面。我需要在服務器本身上進行重定向嗎?

感謝

更新:有一個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

更新:(這是從內存普爾雷並且可能無法編譯原樣)

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格式匹配,我的模塊當前會執行server.transfer到我的aspx頁面。我怎樣才能將它轉移到HttpHandler? –

+0

更新我的答案。您的模塊只能在處理程序之後進行處理。將您正在使用的任何代碼移動到處理程序中的ProcessRequest方法中。 –

+0

謝謝,我正在努力工作,而不是需要。處理程序運行良好。我改變了響應部分,並在我的文章中更新。 –