使用CloudFlare Worker作为子目录时,管理分页中的URL错误

时间:2020-09-08 作者:Joel

我们实现了一个cloudflare worker来服务我们的子域博客。领域com通过子目录www.domain.com/blog 按照这里的描述完成https://blog.cloudflare.com/subdomains-vs-subdirectories-improved-seo-part-2/

我们在WP中更新了站点设置,一切正常,但admin中的分页仍然指向原始主机blog。领域com公司

当使用代理从一个特殊目录为博客提供服务时,我看到了类似的问题,除了修改我将避免的WP核心文件之外,这似乎不是真正的解决方案。

其中,WP正在拉取除WP配置以外的主机。php文件?

1 个回复
最合适的回答,由SO网友:Joel 整理而成

使用CF Worker的修改版本,分页问题已得到解决。我在cloudflare post 哪一个指向这个workers script

    addEventListener(\'fetch\', event => {
  event.respondWith(handleRequest(event.request))
})

// keep track of all our blog endpoints here
const config = {
  hostname: "blog.domain.com",
  mainhostname: "www.domain.com",
  targetSubdirectory: "/blog",
  assetsPathnames: ["/wp-content/", "/wp-includes/"]
}

async function handleRequest(request) {
  const parsedUrl = new URL(request.url)
  const requestMatches = match => new RegExp(match).test(parsedUrl.pathname)
  
    /**
     * Best practice is to only assign new properties on the request
     * object (i.e. RequestInit props) through either a method or the constructor
     */
    let newRequestInit = {
    }
    // Change URL
    let url = parsedUrl.href.replace(parsedUrl.hostname + config.targetSubdirectory, config.hostname)
    if (url.includes(\'/2020/06/01/some-post\') && url[url.length-1] !== \'/\') {
      url = url + \'/\'
    }
    // Change just the host
    url = new URL(url)
    // Best practice is to always use the original request to construct the new request
    // thereby cloning all the attributes, applying the URL also requires a constructor
    // since once a Request has been constructed, its URL is immutable.
    const newRequest = new Request(url, new Request(request, newRequestInit))
    try {
      return await fetch(newRequest)
    } catch (e) {
      return new Response(JSON.stringify({ error: e.message }), { status: 500 })
    }
  }
另外,有一行代码可以修复URL,但没有斜杠,这对于开箱即用的脚本不起作用,但我们应该能够修改js代码来处理这种情况,而无需对单个URL进行硬编码

相关推荐

CloudFlare的Rocket Loader+WordPress->忽略脚本?

我正在努力使Cloudflare的火箭装载机在我的WP站点上工作。除了WP可视化编辑器外,其他一切都正常工作。我遵循了这里的建议,但不起作用:How do I add custom attributes to javascript tags in Wordpress?Cloudflare表示,为了使Rocket Loader忽略javascript文件,我需要在脚本之前添加data cfasync=“false”标记:<script data-cfasync=\"false\" src=\"/jav