基于url参数重定向(通过PHP或cPanel)


Redirect based on url arguments (via PHP or cPanel)

我刚刚开始使用AmazonS3来托管静态文件(图像、视频等)。为了访问上传的文件,会创建临时链接。一个临时链接看起来像这样:

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

我想要的是通过我的url提供这些文件,类似于这样:

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

我知道我可以通过PHP(例如)将请求重定向到http://s3.mydomain.com到Amazonurl,但我不希望地址栏发生更改。我可以创建一个.htaccess来将url转换为Amazon url,但正如我所知,.htacccess无法重定向到外部资源。

那么,我该如何解决这个问题呢?

有几个解决方案:

.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/之后的所有内容,并简单地用AmazonS3位置替换之前的所有内容。

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