我一直在研究同一个问题。您需要做的是有两个域。一个用于后端博客,另一个指向cloudfront。您的backendblog将被配置为充当其自身(backendblog)。在我的测试示例中,我使用blog 作为后端博客。
如果这是用于生产,您可能会content.example.com
作为后端博客和www.example.com
作为cloudfront。然后在我的example.
棘手的部分是编写一个插件,在收到cloudfront用户代理的请求时,将backendblog中的所有url重写为cloudfront url
<?php
/*
Plugin Name: CDN Rewrite
Plugin URI: http://blog.andrewshell.org/cdnrewrite
Description: Rewrite urls on page if behind a CDN
Author: Andrew Shell
Version: 1.0.0
Author URI: http://blog.andrewshell.org/
*/
if (0 == strcmp($_SERVER[\'HTTP_USER_AGENT\'], \'Amazon CloudFront\')) {
$now = time();
$expires = strtotime(\'+1 hour\', $now);
header("Expires: " . gmdate(DATE_RSS,$expires) . "\\n");
add_filter( \'home_url\', \'cdnrewrite_url\', 100, 4 );
add_filter( \'site_url\', \'cdnrewrite_url\', 100, 4 );
}
function cdnrewrite_url( $url, $path, $orig_scheme, $blog_id )
{
return str_replace(\'blog.andrewshell.org\', \'d11b8ym2xu437t.cloudfront.net\', $url);
}
当您想要编辑帖子并直接登录到backendblog时,它不应该重定向,因为它被配置为backendblog(不是cloudfront url),但来自cloudfront的所有请求都将得到更正,因此链接保留在CDN域上。
这并不完美,如果你查看我的cloudfront url的源代码,你会看到一些对我的backendblog的引用,但这是你想往下看的思路。下一步可能是更改插件以捕获输出缓冲区中的所有输出,并在返回之前对其执行str\\u替换。