【问题标题】:Redirect based on url arguments (via PHP or cPanel)基于 url 参数的重定向(通过 PHP 或 cPanel)
【发布时间】:2012-09-05 15:22:54
【问题描述】:

我刚开始使用 Amazon S3 托管静态文件(图像、视频等)。 为了访问上传的文件,会创建临时链接。 一个临时链接如下所示:

http://zeebit.s3.amazonaws.com/stackoverflow-logo.png?AWSAccessKeyId=AKIAIXEHEYSBDWAAXVVA&Expires=1346888760&Signature=B%2BS%2FlUoRXno3UfSqf9Ua0RuCcBc%3D

我想要的是通过我的网址提供这些文件,如下所示:

http://s3.mydomain.com/zeebit/stackoverflow-logo.png/AKIAIXEHEYSBDWAAXVVA/B%2BS%2FlUoRXno3UfSqf9Ua0RuCcBc%3D

我知道我可以通过 PHP 将请求重定向到 http://s3.mydomain.com 到亚马逊网址(例如),但我不希望地址栏发生变化。 我可以创建一个 .htaccess 来将 url 转换为 Amazon url,但据我所知 .htaccess 不能重定向到外部资源。

那么,我该如何解决呢?

【问题讨论】:

  • 删除了我的答案,因为我不知道 s3/aws/whatever 充当 CDN 而不仅仅是文件存储(我不熟悉亚马逊的产品)。由于它是一个 CDN,所以没有办法做你想做的事,你必须将用户引导到 CDN url。
  • 我在一两个月前自己解决了这个问题。如果您想使用过期的 URL,则没有真正的选择可以保留您自己的(子)域作为文件的位置 - 它必须在 s3.amazon.com 域内。并且 .htaccess 可用于重定向到外部资源(当然需要更改主机名)。

标签: php apache amazon-s3 cpanel


【解决方案1】:

有几个解决方案:

.htaccess 解决方案 #1 - 重写规则

RewriteEngine On
RewriteCond %{HTTP_HOST} ^s3\.  # Hostname starts with "s3."
RewriteCond %{REQUEST_URI} !-f  # Not a file
RewriteCond %{REQUEST_URI} !-d  # Not a directory
RewriteRule ^/(.+)/(.+)/(.+)/(.+)/(.+)$    http://$1.s3.amazonaws.com/$2?AWSAccessKeyId=$3&Expires=$5&Signature=$4 [R=302,L]

注意:您最初所需的 URL 缺少“Expires”值,因此上述方法适用于如下形式的 URL:

http://s3.yourdomain.com/[[S3_Bucket_Name]]/[[S3_Filename]]/[[AWSAccessKeyId]]/[[Signature]]/[[Expires]]

所以:

http://s3.mydomain.com/zeebit/stackoverflow-logo.png/AKIAIXEHEYSBDWAAXVVA/B%2BS%2FlUoRXno3UfSqf9Ua0RuCcBc%3D/1346888760

会重定向到

http://zeebit.s3.amazonaws.com/stackoverflow-logo.png?AWSAccessKeyId=AKIAIXEHEYSBDWAAXVVA&Expires=B%2BS%2FlUoRXno3UfSqf9Ua0RuCcBc%3D&Signature=1346888760

.htaccess 解决方案 #2 - 重定向

虽然不是上述灵活的解决方案,但您可以将以下内容放入您的 .htaccess 文件中

redirect 302 /s3/ http://zeebit.s3.mydomain.com/

使用此规则,请求

http://yourdomain.com/s3/stackoverflow-logo.png?AWSAccessKeyId=AKIAIXEHEYSBDWAAXVVA&Expires=B%2BS%2FlUoRXno3UfSqf9Ua0RuCcBc%3D&Signature=1346888760

基本上会保留/s3/ 之后的所有内容,并将其之前的所有内容替换为 Amazon S3 位置。

http://zeebit.s3.amazonaws.com/stackoverflow-logo.png?AWSAccessKeyId=AKIAIXEHEYSBDWAAXVVA&Expires=B%2BS%2FlUoRXno3UfSqf9Ua0RuCcBc%3D&Signature=1346888760

【讨论】:

  • 我在我的域上创建了一个子域 s3。此子域指向 public_html/s3 文件夹。在此文件夹中,我放置了您建议的 .htaccess 文件(在解决方案 #1 中)。如果我访问 url:s3.yourdomain.com/[[S3_Bucket_Name]]/[[S3_Filename]]/… 并更改了参数当然会显示 404 错误。你能在你的服务器上测试它并告诉我它是否有效吗?谢谢!
  • 好的,问题是,当一些签名变量被解码时,它们包括斜线。现在正在玩弄解决这个问题的想法,但老实说,我越是关注这个问题,我看到的目的就越少。
猜你喜欢
  • 2019-04-17
  • 1970-01-01
  • 2011-09-30
  • 2021-07-29
  • 2011-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多