2014-06-22 52 views
1

我遇到了一个问题,我的网站www.example.com被映射到AWS Cloudfront。但是,我希望Cloudfront CDN将主机“www.example.com”传递到原始服务器以检索内容。它看起来并不像Cloudfront上的此功能,但很确定它是在其他CDN提供商(如LLNW等)上。Cloudfront CDN到Apache的起源

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

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] 

然而,正如我曾希望这是行不通的。

任何建议,将不胜感激。

谢谢!

回答

1

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

!^.cloudfront\.net被锚定,因此指定该主机必须是不匹配恰好一个字符(由.指定),接着cloudfront.net。这永远不会匹配,所以条件总是如此,并且不排除cloudfront。

由非锚定一个替换的条件,让你的两个条件成为:

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

仅供参考,更新,回答,解决的条件1和2 – zx81

+0

感谢您的回答之间的失配。这是否意味着任何访问example.com的请求都将被重定向到www.example.com,除非该请求来自cloudfront.net主机? –

+0

已更新的答案。 :) – zx81