【问题标题】:URL Shortener is not previewing the target pageURL Shortener 没有预览目标页面
【发布时间】:2011-09-07 09:29:29
【问题描述】:

我正在创建一个内部(仅来自我们网站的链接)网址缩短服务。当我使用 bit .ly 或 tinyurl 之类的服务,然后将缩短的链接发布到 facebook 时,会显示目标的预览(完整链接)。当我尝试对自己的页面执行此操作时,它会显示重定向页面。

例如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();

【问题讨论】:

    标签: c# asp.net redirect


    【解决方案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);
            }
    
        }
    

    您的模块在处理程序之后得到处理,因此您应该在处理程序中处理请求。如果无法处理,则忽略它并让它通过

    【讨论】:

    • 好吧,这听起来是个好主意,但我无法从我的模块获取请求到我的处理程序。如果 URL 格式匹配,我的模块当前执行 server.transfer 到我的 aspx 页面。如何将其传输到 HttpHandler?
    • 更新我的答案。您的模块仅在处理程序之后得到处理。将您正在使用的任何代码移动到处理程序中的 ProcessRequest 方法中。
    • 谢谢,我做得比它需要的要难。处理程序运行良好。我稍微更改了响应部分并在我的帖子中进行了更新。
    猜你喜欢
    • 1970-01-01
    • 2017-07-26
    • 2017-09-22
    • 2017-02-09
    • 1970-01-01
    • 2016-02-26
    • 2015-04-05
    • 1970-01-01
    • 2014-10-19
    相关资源
    最近更新 更多