我正在使用CloudFront为我的网站提供图像,css和js文件,使用自定义源选项以及子域名CNAMEd到我的帐户。它工作得很好。
主要网站:www.mainsite.com
示例页面:www.mainsite.com/summary/page1.htm
此页面从static1.mainsite.com/images/image1.jpg
调用图像如果Cloudfront尚未缓存图片,则会从www.mainsite.htm / images / image1.jpg获取图片
一切正常。
问题是谷歌警报已报告在以下位置找到该页面:
该页面只能从www访问。现场。不应该从CNAME域访问页面。
我试图在.htaccess文件中放一个mod重写,我也尝试在主脚本文件中放一个exit()。
但是当Cloudfront在其缓存中找不到该文件的static1版本时,它会从主站点调用它,然后对其进行缓存。
问题是:
1. What am I missing here?
2. How do I prevent my site from serving pages instead of just static components to cloudfront?
3. How do I delete the pages from cloudfront? just let them expire?
感谢您的帮助。
乔
答案 0 :(得分:28)
[我知道这个帖子已经过时了,但我正在为像我这样几个月后才能看到它的人回答。]
从我所阅读和看到的内容来看,CloudFront并未在请求中始终如一地标识自己。但您可以通过覆盖CloudFront分发版的robots.txt来解决此问题。
1)创建一个仅包含一个文件的新S3存储桶:robots.txt。这将是您的CloudFront域的robots.txt。
2)转到AWS控制台中的分配设置,然后单击“创建原点”。添加桶。
3)转到“行为”并单击“创建行为”: 路径模式:robots.txt 原产地:(你的新桶)
4)将robots.txt行为设置为更高的优先级(更低的数字)。
5)转到失效并使/robots.txt无效。
现在将从存储桶中提供abc123.cloudfront.net/robots.txt,其他所有内容都将从您的域中提供。您可以选择允许/禁止在任一级别单独进行爬网。
另一个域/子域也可以代替存储桶,但为什么会遇到麻烦。
答案 1 :(得分:1)
您需要添加robots.txt文件并告知抓取工具不要在static1.mainsite.com下为内容编制索引。
在CloudFront中,您可以控制CloudFront将访问您的服务器的主机名。我建议使用特定的主机名来提供给CloudFront,这与常规网站主机名不同。通过这种方式,您可以检测到对该主机名的请求,并提供不允许所有内容的robots.txt(与常规网站robots.txt不同)