Amazon S3 Redirect Rules Generator
A Ruby script to generate simple Amazon S3 Redirection Rules XML file.
Update: There is an app for that now! Use Amazon S3 Redirector (Web app) and you can generate the XML without any knowledge about Ruby. Thanks to @rainforestapp. BTW, It's open source too.
Dependencies
- Nokogiri
Usage
ruby s3-routes-generator.rb input.txt
The generated XML is printed to STDOUT.
Assumptions on S3 Bucket
It assumes that:
- Website Hosting is enabled.
- Index Document is set to
index.html
.
Conversion Rules
- For
target
path, if it ends with/
, thenindex.html
will be appended. - For
source
andtarget
path, the leading/
will be removed, because S3's object key does not begin with/
.
Sample Input
One rule per line. Each rule is constructed by source
and target
path, spearated by at least 1 space.
Please not that rules are matched using KeyPrefixEquals
, and is First-In-First-Out, so if you have multiple redirections from same prefixes (typically /dir
and /dir/subdir
), please put the longer one before the shorter one, i.e. Depth-First.
/home /
/products/iphone/specs.html /iphone/specs.html
/products/iphone/ /iphone/
/products/ipad/accessories/ /ipad/accessories.html
/products/ipad/ /ipad/
/products /
Sample Output
<?xml version="1.0"?>
<RoutingRules>
<RoutingRule>
<Condition>
<KeyPrefixEquals>home</KeyPrefixEquals>
</Condition>
<Redirect>
<ReplaceKeyWith>index.html</ReplaceKeyWith>
</Redirect>
</RoutingRule>
<RoutingRule>
<Condition>
<KeyPrefixEquals>products/iphone/specs.html</KeyPrefixEquals>
</Condition>
<Redirect>
<ReplaceKeyWith>iphone/specs.html</ReplaceKeyWith>
</Redirect>
</RoutingRule>
<RoutingRule>
<Condition>
<KeyPrefixEquals>products/iphone/</KeyPrefixEquals>
</Condition>
<Redirect>
<ReplaceKeyWith>iphone/index.html</ReplaceKeyWith>
</Redirect>
</RoutingRule>
<RoutingRule>
<Condition>
<KeyPrefixEquals>products/ipad/accessories/</KeyPrefixEquals>
</Condition>
<Redirect>
<ReplaceKeyWith>ipad/accessories.html</ReplaceKeyWith>
</Redirect>
</RoutingRule>
<RoutingRule>
<Condition>
<KeyPrefixEquals>products/ipad/</KeyPrefixEquals>
</Condition>
<Redirect>
<ReplaceKeyWith>ipad/index.html</ReplaceKeyWith>
</Redirect>
</RoutingRule>
<RoutingRule>
<Condition>
<KeyPrefixEquals>products</KeyPrefixEquals>
</Condition>
<Redirect>
<ReplaceKeyWith>index.html</ReplaceKeyWith>
</Redirect>
</RoutingRule>
</RoutingRules>
References
License
None. I release this script to Public Domain.
This comment has been minimized.
Is it possible to detect user agent from the request and redirect based on the user agent on amazon s3 static hosting?