Использование .htaccess для обслуживания файлов из Amazon S3 CloudFront

Использование .htaccess для обслуживания файлов из Amazon S3 CloudFront

В идеале я бы взял текущий клиентский сайт, загрузил .htaccess с регулярным выражением внутри, которое будет соответствовать URI, и если он найдет определенное расширение файла, он будет использовать тот же путь, но с измененным доменом.

т.е.

Обычный путь:

http://www.domain.com/something/images/someimage.jpeg
http://www.domain.com/assets/js/jquery.js

Перевод .htaccess превратит вышеизложенное в:

http://mycdn.other.com/something/images/someimage.jpeg
http://mycdn.other.com/assets/js/jquery.js

Я гуглил это часами подряд, безуспешно. Опять же, это для фактического использования Amazon's CloudFront. S3 уже смонтирован на веб-сайте для резервного копирования и хранения файлов с использованием s3fs, но это не решает проблему, поскольку он использует S3 напрямую, а не CloudFront.

решение1

Протестировано и работает на httpd-2.2.3-31.el5.centos

Метод перенаправления:

RewriteEngine On
RewriteCond %{REQUEST_URI} .*jpg$|.*gif$|.*png$ [NC]
RewriteRule (.*) http://www.google.com/$1 [R]

Буква R фактически перенаправит страницу на новый домен, который может оказаться именно тем, что вы ищете, а может и нет.

Метод прокси:

RewriteEngine On
RewriteCond %{REQUEST_URI} .*jpg$|.*gif$|.*png$ [NC]
RewriteRule (.*) http://www.google.com/$1 [P]

P вызовет прокси (при условии, что у вас установлен mod_proxy), который будет сохранять контент, поступающий с вашего сервера, а не перенаправлять его. Это заставит ваш сервер выполнять больше работы и сгенерирует значительно большую пропускную способность ввода-вывода, чем перенаправление. Прокси стоят дорого, но они гарантируют, что все отображается под одним доменом, а не обращаются к удаленному серверу или CDN для контента

Редактировать: Я обновил его, чтобы использовать request_URI вместо request_filename, таким образом, файлы внутри подкаталогов, которые не существуют, по-прежнему будут проксироваться / перенаправляться.

Связанный контент