Amazon s3 在AmazonS3中为小大小写文件创建大小写重定向
情况如下: 我在AmazonS3上有一个静态网站主机。其中的所有文件都是小写字母,例如:Amazon s3 在AmazonS3中为小大小写文件创建大小写重定向,amazon-s3,amazon,batch-rename,Amazon S3,Amazon,Batch Rename,情况如下: 我在AmazonS3上有一个静态网站主机。其中的所有文件都是小写字母,例如:file.html 我正在寻找一个脚本/程序/工具来查找S3站点中的所有小写字母文件,并创建几个cased 301重定向 例如,创建File.html和File.html两个文件,并使用新的301重定向功能将大写字母的请求重定向到小写字母的真实文件 请注意我已经拼凑了一个脚本,可以满足您的需要。这不是很全面,但应该做到这一点。我已经在GitHub上发布了 用法: python makeredirects.py
file.html
我正在寻找一个脚本/程序/工具来查找S3站点中的所有小写字母文件,并创建几个cased 301重定向
例如,创建File.html
和File.html
两个文件,并使用新的301重定向功能将大写字母的请求重定向到小写字母的真实文件
请注意我已经拼凑了一个脚本,可以满足您的需要。这不是很全面,但应该做到这一点。我已经在GitHub上发布了 用法:
python makeredirects.py访问\u文件的密码bucketname密钥\u
我尝试了一个使用重定向规则功能的版本,但是没有成功,因为有大约20条规则的限制。因此,此脚本将创建大量空键
为了完整性,并且因为它太小,下面是脚本:
#!/usr/bin/env python
"""
This script takes a file on S3 and creates a redirect from every possible
permutation of case to the original file.
Author: Michael Wirth (https://github.com/mikewirth/s3-caseredirect/)
"""
import sys
import os.path
import argparse
try:
import boto.s3.connection
except:
print "boto library (http://code.google.com/p/boto/) for aws needs to be installed"
sys.exit(1)
filenames = None
def make_case_insensitive(bucket, access, secret, key):
""" Get filename permutations """
global filenames
filenames = []
filename = os.path.basename(key)
path = os.path.dirname(key)
filename_permutations(filename)
connection = boto.s3.connection.S3Connection(access, secret, True)
b = connection.get_bucket(bucket)
for fname in filenames:
if fname == filename:
continue
k = b.new_key(os.path.join(path, fname))
k.set_redirect(key)
def filename_permutations(filename, pos=0):
if len(filename) == pos:
filenames.append(filename)
else:
upper = filename[:pos] + filename[pos:pos+1].upper() + filename[pos+1:]
lower = filename[:pos] + filename[pos:pos+1].lower() + filename[pos+1:]
if upper != lower:
filename_permutations(upper, pos+1)
filename_permutations(lower, pos+1)
else:
filename_permutations(filename, pos+1)
def main():
""" CLI """
parser = argparse.ArgumentParser()
parser.add_argument("access", help="AWS credentials: access code")
parser.add_argument("secret", help="AWS credentials: secret")
parser.add_argument("bucket", help="Name of Amazon S3 bucket")
parser.add_argument("key", help="Name of the key to make available case-insensitively. (Starts with a slash.)")
args = parser.parse_args()
make_case_insensitive(args.bucket, args.access, args.secret, args.key)
if __name__ == "__main__":
main()
因为S3是区分大小写的系统,所以我必须查找它,否则我的站点会出现太多404错误。由于文件太多,而且经常有更多的文件,因此无法手动完成。如果您有其他解决方案让S3忽略大小写或变得不区分大小写,请也提出建议。这是从您的站点控制访问,还是通过直接链接(例如用户键入URL)?如果它在你的网站上,你能在调用S3内容之前伪造一个htaccess重写规则(eg)将请求转换为小写吗?Hi@OffBeatMadama,我直接在S3上托管网站,并具有新的网站功能,所以我不使用cloudfront。我尝试过搜索S3是否支持htaccess,但没有luckit看起来没有htaccess(尽管有论坛评论说他们正在考虑),但这可能会帮助您(而不是编写一大堆文件)-这可能有些过分,但有一种方法是将所有内容指向“真实的”apache Web服务器,基本上只提供一个.htaccess文件,将所有内容重写为小写文件名。如果S3有.htaccess支持,它会更棒。谢谢你的脚本。我会尝试的,我很想看到你进一步完善它。