使用.htaccess重定向wordpress上传文件夹到s3存储桶

问题描述:

我正尝试在wordpress中使用htaccess将我的上传文件夹重定向到我的s3存储桶,但它不工作。我网站上的所有图片仍然通过服务器在本地提供,而不是链接到存储分区。使用.htaccess重定向wordpress上传文件夹到s3存储桶

这是我的htaccess文件:

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

# END WordPress 

RewriteEngine On 
RewriteRule ^wp-content/uploads/(.*)$ https://BUCKET.s3.amazonaws.com/wp-content/uploads/$1 [L] 

# BEGIN W3TC CDN 
<FilesMatch "\.(ttf|ttc|otf|eot|woff|font.css)$"> 
<IfModule mod_headers.c> 
    Header set Access-Control-Allow-Origin "*" 
</IfModule> 
</FilesMatch> 
# END W3TC CDN 
+1

我会建议使用[W3的总缓存(https://wordpress.org/plugins/w3-total-cache/),它内置了这个功能,并且[这里有一个教程(HTTPS:/ /www.elegantthemes.com/blog/tips-tricks/how-to-use-amazon-s3-and-cloudfront-with-wordpress)。 – APAD1

+0

我正在使用它。它会在单个帖子中替换它,但不会在我的主题主页缩略图 – user2570937

有几个问题。你需要把规则高于你的wordpress规则,因为wordpress规则路由请求index.php。 接下来,您将需要使用mod_proxy并使用[P] flag,因为无论在重写过程中没有指定重定向,Apache都会执行此操作,因为替换网址是新域。所以Apache将执行重定向。因此使用[P] flag应该代理内容而不是重定向。这应该完成你所需要的。

RewriteEngine On 
RewriteRule ^wp-content/uploads/(.*)$ https://BUCKET.s3.amazonaws.com/wp-content/uploads/$1 [P] 

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

# END WordPress 
+0

'mod_proxy'中导致本地服务器在将其返回给客户端之前从该桶中获取图像,从而增加服务器的负担,不是吗?这将无法实现在S3上托管文件的全部目的。 –

+0

'这会打败S3上托管文件的全部目的@FabienSnauwaert其实你不知道他的目的是什么。在s3上托管有很多原因。安全,无限的磁盘空间,冗余等问题是要求协助代码,而不是他应该如何使用s3与wordpress。你的评论应该针对他的问题。我只解释了它为什么不起作用。 –