我使用cloudfront为我的网页创建了签名网址,如下所示:
https://abcXXX.cloudfront.net/index.html?Expires=1510886661&Signature=XXX&Key-Pair-Id=XXX
此网页存储在Amazon S3上。
虽然网页本身加载正常,但问题是它链接到许多其他文件,如CSS和JS文件。
e.g。请考虑以下HTML文档:
<html>
<head>
<script src="js/foo.js"/>
</head>
<body>
</body>
</html>
这意味着我在控制台中获得了以下许多内容:
Failed to load resource: the server responded with a status of 403 ()
显而易见的解决方案是设置cookie。所以我做了以下事情:
$sdk = new Aws\Sdk( [
'region' => 'eu-west-2',
'version' => 'latest',
] );
$cloudFront = $sdk->createCloudFront();
$domain = "xxx.cloudfront.net";
$resourceKey = "https://{$domain}/index.html";
$signedCookieCannedPolicy = $cloudFront->getSignedCookie([
'url' => $resourceKey,
'expires' => time() + 60,
'private_key' => 'private.pem',
'key_pair_id' => 'XXX'
]);
foreach ($signedCookieCannedPolicy as $name => $value) {
setcookie($name, $value, 0, "", $domain, true, true);
}
wp_redirect( $resourceKey ); // wordpress redirect
die();
但是,重定向后,我得到了:
<Error>
<Code>MissingKey</Code>
<Message>
Missing Key-Pair-Id query parameter or cookie value
</Message>
</Error>
检查饼干时,似乎从未过去。这可能是因为我认为您无法将cookie从一个域(例如从https://mybookshop.com)设置到另一个域。
如何解决我的问题?
更新
我尝试手动添加cookie,虽然主index.html文件打开正常,但我现在在控制台上收到以下错误:
GET https://XXX.cloudfront.net/css/ereader.css net::ERR_ABORTED