#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 хозяин?