Cloudfront CDN в Apache origin

#apache #mod-rewrite #amazon-cloudfront

#apache #переписать мод #amazon-cloudfront

Вопрос:

Я столкнулся с проблемой, из-за которой мой веб-сайт www.example.com сопоставляется с AWS Cloudfront. Тем не менее, я бы хотел, чтобы Cloudfront CDN также передавал хост «www.example.com » на исходный сервер для извлечения содержимого. Не похоже, что эта функция доступна в Cloudfront, но я уверен, что она есть у других поставщиков CDN, таких как LLNW и т. Д.

Теперь, чтобы обойти это, я могу использовать запись «example.com » как источник на стороне моего сервера, НО это может легко вызвать проблему с дублирующимся контентом, и я уже перенаправляю не-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]
 

Комментарии:

1. К вашему сведению, обновленный ответ для устранения несоответствия между условиями 1 и 2.

2. Спасибо за ответ. Означает ли это, что любой запрос, попадающий example.com , будет перенаправлен на www.example.com ЗА исключением случаев, когда этот запрос исходит от cloudfront.net хозяин?