2011-09-07 41 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

谢谢,我正在努力工作,而不是需要。处理程序运行良好。我改变了响应部分,并在我的文章中更新。 –