Amazon S3 でイメージをホストし、1 つのイメージ サイズのみを保存します。
これまで、Imageresizerを使用して、リクエストごとに画像のサイズを変更することに成功しました。
ここで、Cloudfront CDN を紹介する必要がありますが、これが問題になっています。
ドキュメントに従って設定をセットアップしました。
このような:
<resizer>
<diskcache dir="~/app_data" autoClean="true"/>
<clientcache minutes="1440"/>
<cloudfront redirectThrough="http://cdn.example.com" redirectPermanent="false"/>
<plugins>
<add name="DiskCache"/>
<add name="ClientCache"/>
<add name="MvcRoutingShim"/>
<add name="CloudFront"/>
</plugins>
</resizer>
次に、アプリケーションへの URL を次のようにキャプチャします。
private static void ImageResizer_OnPostAuthorizeRequestStart(
IHttpModule sender2, HttpContext context)
{
string path = Config.Current.Pipeline.PreRewritePath;
if (!path.StartsWith(PathUtils.ResolveAppRelative("~/cdn/"),
StringComparison.OrdinalIgnoreCase))
{
return;
}
Config.Current.Pipeline.SkipFileTypeCheck = true;
Config.Current.Pipeline.ModifiedQueryString["cache"]
= ServerCacheMode.Always.ToString();
}
Imageresizer がそれらを処理できるようにします。
その場合、正しい CDN パスを使用するように URL が変更されますが、クエリ文字列パラメーターもセミコロンに変更されます。
これに:
残念ながら、Amazon S3 はこれを好まず、Access Denied として除外します。ただし、Amazon は喜んで元のクエリ文字列を提供します。
では、クエリ文字列を保持して、Imageresizer がパラメータをセミコロンに変更しないようにするにはどうすればよいでしょうか。
または、セミコロンに関係なく画像を提供するように amazon を設定しますか?