Cloudfront CDN到Apache的起源

时间:2014-06-22 06:05:16

标签: apache mod-rewrite amazon-cloudfront

我遇到了一个问题,我的网站www.example.com已映射到AWS Cloudfront。但是,我还希望Cloudfront CDN将主机“www.example.com”传递给源服务器以检索内容。看起来这个功能在Cloudfront上看起来不是很明显,但可以肯定它在LLNW等其他CDN提供商上。

现在为了解决这个问题,我可以使用“example.com”的A记录作为我服务器端的原点但是这很容易导致重复的内容问题而且我已经将非www重定向到我的www了Apache配置:

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

有没有办法让所有EXCEPT * .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]

然而,它并没有像我希望的那样有效。

任何建议都将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:2)

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

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

用未锚定的条件替换该条件,以便您的两个条件成为:

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