云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

网站服务器_什么云服务器便宜_便宜的

小七 141 0

Cloudflare Workers的SEO最佳实践,第2部分:实现子域

回顾第一部分,讨论了子目录和子域的优缺点。子目录策略通常优于子域,因为子域受到关键字和反向链接稀释的影响。子目录策略通过确保每个关键字都归属于根域,而不是相互稀释,从而更有效地提高网站的搜索排名子域.子目录第一部分没有NGINXIn的策略,我们的朋友鲍勃在bobtopia.coolghosthost.com和他有联系的博客bobtopia.com使用CNAME DNS记录。但是如果他想让他的博客住在那里呢bobtopia.com/blog获得子目录的搜索引擎优化优势?通常需要使用NGINX这样的反向代理将流量从子目录路由到远程托管服务。我们将演示如何使用Cloudflare Workers实现子目录策略,并消除对NGINX的依赖。(Cloudflare Workers是运行在Cloudflare全局网络上的无服务器函数。)回到BobtopiaLet,我们编写一个Worker来代理来自子目录的流量–bobtopia.com/blog–到远程托管平台–bobtopia.coolghosthost.com. 这意味着如果我去bobtopia.com/blog,我应该看看bobtopia.coolghosthost.com,但我的浏览器应该仍然认为它是打开的bobtopia.com.Configuration网站选项在Workers编辑器中,我们将使用一些基本配置选项启动一个新脚本。//在此处跟踪所有博客端点const myBlog={主机名:"bobtopia.coolghosthost.com",targetSubdirectory:"/articles",资产路径名:/public/","/assets/"]}脚本将代理来自myBlog.TargetSub目录到Bob托管的Ghost端点,我的博客主机名. 我们谈谈我的博客.assetsPathnames一点稍后。请求代理来自bobtopia.com/articles到bobtopia.coolghosthost.com(呃哦。。。因为托管的Ghost blog实际上并不存在)Request HandlersNext,我们将添加一个请求处理程序:异步函数HandlerRequest(请求){回迁(请求)}addEventListener("获取",事件=>{事件响应(手柄请求(事件请求))})到目前为止,我们只是通过handleRequest传递请求,而没有修改。让我们做点什么吧:异步函数handleRequest(请求){...//如果请求的是blog html,那么就获取它if(请求匹配(myBlog.TargetSub目录)) {控制台.log("这是对博客文档的请求",解析路径名)const targetPath=格式路径(parsedUrl)回迁(`https://${我的博客主机名}/${targetPath}`)}...控制台.log("这是对我的根域的请求",解析路径名)//如果这不是一个请求博客相关的东西,什么都不做回迁(请求)}addEventListener("获取",事件=>{事件响应(手柄请求(事件请求))})在上面的代码中,我们添加了一个条件语句来处理myBlog.TargetSub目录. 注意这里我们省略了helper函数。相关代码位于函数顶部附近的if块中。requestMatches助手检查传入的请求是否包含targetSubdirectory。如果是,则向我的博客主机名获取返回到浏览器。什么时候浏览器解析HTML,它发出文档所需的附加资产请求(比如图像、样式表和脚本)。我们需要另一个条件语句来处理这类请求。//如果它的blog资产如果([我的博客.assetsPathnames].some(请求匹配项){控制台.log("这是对博客资产的请求",解析路径名)常数资产=请求.url.replace(解析Durl.hostname, 我的博客主机名);取回(assetUrl)}此形状类似的块检查请求是否与中枚举的任何路径名匹配我的博客.assetPathnames并获取完全呈现页面所需的资产。资产恰好位于Ghost blog上的/public和/Assets。当获取HTML并查看脚本、图像和样式表.日志显示Ghost live-in/assets和/public所需的各种脚本和样式表。包含helper函数的完整脚本是://在这里跟踪我们所有的博客端点const myBlog={主机名:"bobtopia.coolghosthost.com",targetSubdirectory:"/articles",资产路径名:/public/","/assets/"]}异步函数handleRequest(请求){//返回空字符串或路径(如果存在)const formatPath=(url)=>{常量修剪=url.pathname.split("/").filter(part=>part)返回修剪的&修剪长度>1个?`${修剪。连接("/")}` : ""}const parsedUrl=新URL(请求.url)const requestMatches=match=>new RegExp(match).test(解析路径名)//如果它的博客是html,那就去吧if(请求匹配(myBlog.TargetSub目录)) {控制台.log("这是对博客文档的请求",解析路径名)const targetPath=格式路径(parsedUrl)回迁(`https://${我的博客主机名}/${targetPath}`)}//如果它的博客资产,得到它们如果([我的博客.assetsPathnames].some(请求匹配项){控制台.log("这是对博客资产的请求",解析路径名)常数资产=请求.url.replace(解析Durl.hostname, 我的博客主机名);取回(assetUrl)}控制台.log("这是对我的根域的请求",解析程序主机, 解析路径名);//如果这不是一个请求博客相关的东西,什么都不做回迁(请求)}addEventListener("获取",事件=>{事件响应(手柄请求(事件请求))})关于当前的实现,有一个重要的警告值得一提。如果托管服务资产存储在与根域上的路由共享名称的文件夹中,则此脚本将不起作用。例如,如果要从托管服务的根目录服务资产,则对bobtopia.com网站主页将被这些资产请求屏蔽,而主页不会装上。那个这里的解决方案包括修改blog assets块,以在不使用路径的情况下处理资产请求。我将留给读者来解决这个问题,但是更一般的解决方案可能涉及到改变我的博客.assetPathnames到myBlog.assetFileExtensions,它是所有资产文件扩展名(如.png和.css)的列表。然后,assets块将处理包含assetFileExtensions而不是assetPathnames.consultionBob在使用Cloudflare Workers将他的子域转换为子目录后,现在正在享受与Alice相同的SEO优势。世界上的小胖子们,高兴吧!有兴趣在不在Cloudflare上设置域的情况下部署Cloudflare Worker吗?我们正在使使用自定义子域来构建无服务器应用程序变得更加容易工人.dev。如果您已经是Cloudflare客户,可以在此处向现有网站添加员工。保留a工人.dev子域