github pages_使用此HTTP hack重定向GitHub Pages网站

github pages

我在GitHub Pages上为我的私人项目运行了一些静态网站。 我对这项服务非常满意,因为它支持自定义域,自动重定向到HTTPS并透明地安装SSL证书(通过Let's Encrypt自动颁发)。 它非常快(感谢Fastly的内容交付网络),并且非常可靠(我多年来没有遇到任何问题)。 考虑到我免费获得所有这些东西的事实,它目前完全符合我的需求。

但是,它有一个重要的局限性:因为它仅服务于静态网站,所以这意味着没有查询参数,没有在服务器端生成动态内容,没有用于注入任何服务器端配置的选项(例如.htaccess),并且唯一我可以推送到网站根目录的东西是静态资产(例如HTML,CSS,JS,JPEG等)。 通常,这不是大问题。 有很多可用的开源静态站点生成器 ,例如默认情况下可从仪表板使用的Jekyll和在大多数情况下我更喜欢的Pelican 。 然而,当您需要实施服务器端传统上可以解决的问题时,全新的挑战开始了。

例如,最近我不得不为我的一个网站更改自定义域名。 保留旧的旧书非常可笑,我不愿意继续浪费金钱。 我找到了一个更便宜的替代方案,并立即面临一个更大的问题:所有搜索引擎的索引中都带有旧名称。 更新索引需要时间,在这种情况下,我将不得不将所有请求重定向到新位置。 理想情况下,我会将每个索引资源重定向到新站点上的等效资源,但是至少,我需要将请求重定向到新的起始页。 我可以访问旧域名的时间足够长,因此可以同时在两个域名上分别运行该站点。

对于这种情况,有一种适当的解决方案应在任何可能的情况下使用:永久重定向或301永久移动状态代码是重定向HTTP协议中实现的页面的方法。 唯一的问题是,它应该在服务器响应的HTTP标头中的服务器端发生。 但是我唯一可以实现的解决方案是在客户端。 即HTML代码或JavaScript。 我没有考虑JS变体,因为我不想依靠Web浏览器中脚本的支持。 定义任务后,我想起了一个解决方案: HTML <meta>标记 <meta http-equiv>刷新 HTTP标头 。 尽管可以用它要求浏览器在指定的秒数后重新加载页面或跳转到另一个URL,但经过一些研究,我发现它比一些我想像的事实和细节要复杂得多。

解决方案

TL; DR (适用于对所有详细信息不感兴趣的人):简而言之,此解决方案将两个存储库配置为具有自定义域名的静态网站。

在具有旧域的网站上,我重建了网站的整个目录结构,并将以下index.html(包括根目录)分别放在其中:


   
   
<!DOCTYPE HTML>                                                                
<html lang="en">                                                                
    <head>                                                                      
        <meta charset="utf-8">
        <meta http-equiv="refresh" content="0;url={{THE_NEW_URL}}" />      
        <link rel="canonical" href="{{THE_NEW_URL}}" />                    
    </head>                                                                                                                                                                  
    <body>                                                                      
        <h1>                                                                    
            The page been moved to <a href="{{THE_NEW_URL}}">{{THE_NEW_URL}}</a>
        </h1>                                                                  
    </body>                                                                    
</html>

当有人在旧域上打开资源时,大多数Web浏览器会立即重定向到新网站上的相同资源(由于http-equiv =“ refresh” )。 对于任何丢失或不存在的资源,在旧网站的根目录中创建内容相似但没有rel =“ canonical”404.html文件会很有帮助(在这种情况下,因为没有规范页面)。

最后一个难题是规范链接关系rel =“ canonical” ),只要实现的重定向不是永久性的 ,它就可以防止重复内容 从HTTP响应的角度来看,当请求成功完成并且向搜索引擎指示资源已移动并且应该与新(首选)位置相关联时,就会发生这种情况。

我了解到一些有关http-equiv =“ refresh”rel =“ canonical”的有趣事实。 HTML元标记http-equiv用于模拟服务器响应中HTTP标头的存在。 也就是说,无法访问Web服务器配置的Web开发人员可以通过从HTML文档(HTTP响应的“主体”)“注入” HTTP标头获得类似的结果。 看来刷新头,它已被用于所有流行的网络浏览器多年, 实际上并不存在 。 至少不作为标准的HTTP标头。 曾经有计划将其添加到HTTP / 1.1规范中,该规范被推迟到HTTP / 1.2 (或更高版本),但从未实现。

摘要

查找资源的真实源URL的任务绝非易事。 有不同的方案名称(HTTP,HTTPS),多个查询参数(page.html,page.html?a = 1),可解析为相同IP地址的各种主机名等。所有这些选项使网页看上去与搜索引擎,但页面仍然相同。 当相同的内容发布在独立的Web服务上时,情况甚至更糟。 2009年,Google,Yahoo和Microsoft宣布支持规范链接元素 ,以允许网站管理员为同一页面的一组可能的URL选择规范(首选)URL,以清理网站上的重复URL。 这有助于搜索引擎选择正确的URL来与内容相关联,还可以改善网站的SEO

翻译自: https://opensource.com/article/19/7/permanently-redirect-github-pages

github pages

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值