【问题标题】:Cloudfront CDN to Apache originCloudfront CDN 到 Apache 源
【发布时间】:2014-06-22 06:05:16
【问题描述】:

我遇到了一个问题,我的网站 www.example.com 映射到 AWS Cloudfront。但是,我还想让 Cloudfront CDN 将主机“www.example.com”传递给源服务器以检索内容。 Cloudfront 上似乎不提供此功能,但可以肯定的是,其他 CDN 提供商(如 LLNW 等)也提供此功能。

现在要解决这个问题,我可以在我的服务器端使用“example.com”的 A 记录作为来源,但这很容易导致重复内容问题,并且我已经将非 www 重定向到 www阿帕奇配置:

RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^/(.*)?$ http://www.example.com/$1 [R=301,NC,NE,L]

有没有办法为所有除 ​​.cloudfront.net 域之外的所有域设置上述规则?这样可以确保来自 cloudfront.net 的任何流量都能够使用“example.com”作为来源,而不会重定向到“www.example.com”,从而导致循环问题。

这是我制定的规则:

RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteCond %{HTTP_HOST} !^.cloudfront\.net$ [NC]
RewriteRule ^/(.*)?$ http://www.example.com/$1 [R=301,NC,NE,L]

但是,它并没有像我希望的那样工作。

任何建议将不胜感激。

谢谢!

【问题讨论】:

    标签: apache mod-rewrite amazon-cloudfront


    【解决方案1】:

    您的第二个条件有一个小错误。

    !^.cloudfront\.net 已锚定,因此指定主机不能完全匹配一个字符(由. 指定)后跟cloudfront.net。这永远不会匹配,因此条件始终为真,并且不排除 cloudfront。

    用一个未锚定的条件替换那个条件,这样你的两个条件就变成了:

    RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
    RewriteCond %{HTTP_HOST} !cloudfront\.net$ [NC]
    

    【讨论】:

    • 仅供参考,更新答案以解决条件 1 和 2 之间的不匹配问题。
    • 感谢您的回答。这是否意味着任何访问 example.com 的请求都会被重定向到 www.example.com,除非该请求来自 cloudfront.net 主机?
    猜你喜欢
    • 2021-07-28
    • 2012-10-15
    • 2021-05-04
    • 2011-08-07
    • 2014-07-09
    • 2021-06-19
    • 1970-01-01
    • 2018-03-10
    • 2013-03-03
    相关资源
    最近更新 更多