mod_rewrite для перемещения изображений Wordpress на Amazon S3 - PullRequest
3 голосов
/ 06 февраля 2010

По сути, я перевожу все свои изображения на s3, но на моем веб-сайте будут тонны старых ссылок на старые изображения. Нужно переписать что-нибудь в папке wp-content / uploads / на адрес s3.

Короткая история: я не очень хорошо разбираюсь в регулярных выражениях и уже давно занимаюсь этим. Любой совет или помощь будет принята с благодарностью.

редактирование:

вот что у меня так далеко:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php


RewriteRule ^wp-content/uploads/(.*)$ http://example.s3.amazonaws.com/wp-content/uploads/$1 [L]
</IfModule>

Ответы [ 3 ]

11 голосов
/ 06 февраля 2010

Вместо использования mod_rewrite, вы также можете установить обратный прокси , используя mod_proxy. Это должно быть проще в настройке - регулярные выражения не требуются.

Основная директива mod_proxy для настройки обратного прокси - ProxyPass. Обычно вы добавляете следующую строку в локальный файл конфигурации Apache (обычно httpd.conf или apache2.conf):

ProxyPass  /wp-content/uploads/   http://example.s3.amazonaws.com/wp-content/uploads/

В этом случае браузер будет запрашивать http://your-domain.com/wp-content/uploads/abc.png, но ваш веб-сервер будет выполнять эту функцию, выступая в качестве прокси для http://example.s3.amazonaws.com/wp-content/uploads/abc.png.

Вам также необходимо убедиться, что следующие строки конфигурации не закомментированы в файле конфигурации Apache:

LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so

Обязательно перезапустите локальную службу Apache после внесения каких-либо изменений в файл конфигурации.

Кроме того, не забудьте настроить корзины Amazon S3 для виртуального хостинга ( Документация Amazon ).

3 голосов
/ 29 декабря 2010

Я прихожу к промежуточному решению. Используя обратный прокси, покупайте, используя правило перезаписи. Единственное, что вы должны добавить, это [P] в конце вашего правила перезаписи. Например:

RewriteRule ^wp-content/uploads/(.*)$ http://example.s3.amazonaws.com/wp-content/uploads/$1 [P]

Взгляните на: http://httpd.apache.org/docs/2.0/mod/mod_proxy.html#forwardreverse

Вам также следует проверить следующие строки конфигурации без комментариев в файле конфигурации Apache, как сказал Даниэль Вассалло:

LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
0 голосов
/ 06 февраля 2010

В вашем примере строка RewriteRule . /index.php не нужна и проблематична, так как она вызовет бесконечный цикл (модификатор [L] ("last") не совсем так, как он звучит), но в противном случае он должен работать как задумано , Возможно, вы захотите сделать постоянное перенаправление, заменив [L] на [R=301].

...