使用mod_rewrite将WordPress图片移动到Amazon S3

3

基本上,我正在将所有的图像转移到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>

在URL之前/之后放一些示例。 - Max Shawabkeh
请提供要翻译的英文内容。 - Brian
3个回答

11

除了使用 mod_rewrite,您还可以使用 mod_proxy 设置 反向代理。这样应该更容易配置 - 无需正则表达式。

设置反向代理的基本 mod_proxy 指令是 ProxyPass。通常,您会将以下行添加到本地 Apache 配置文件(通常为 httpd.confapache2.conf)中:

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

在这种情况下,浏览器将请求http://your-domain.com/wp-content/uploads/abc.png,但您的Web服务器将通过充当代理来提供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 文档)。


这似乎是一个很好的解决方案,但不幸的是,我使用的是共享托管计划,无法访问此类内容 :( - Brian
1
哦,那么URL重写就是唯一的选择了。我会把答案留在这里,以防它能帮助到其他遇到类似情况的人。 - Daniel Vassallo
是的,肯定的。如果我停止使用低端托管并转移到更好的托管,我可能会在未来回到它。根据我上面的尝试,您有关于mod_rewrite的任何建议吗? - Brian

3

我提供一个中间解决方案。 使用反向代理,但使用重写规则。 你需要在重写规则的末尾添加[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配置文件中是否取消了以下配置行的注释,就像Daniel Vassallo所说的那样:
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so

0
在你的例子中,RewriteRule . /index.php 这一行是不必要且有问题的,因为它会导致无限循环([L](“last”)修饰符并不完全像它听起来那样),但除此之外,它应该按预期工作。你可能还想进行永久重定向,将 [L] 替换为 [R=301]

./index.php规则不是WordPress正常运行所必需的吗?还是我在胡说八道? - Brian
是的,确实是这样。您可能想把您的规则放在那个规则上面。 - Tyler Carter
实际上,您需要将其移动到两个文件检查行的上方,否则它将忽略规则并转到物理文件。 - Tyler Carter
1
查查,你应该把那些作为答案发布,因为它们比我的更好,它从没有WordPress的角度看问题。 - Max Shawabkeh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接