這裏的情況:在Amazon S3中爲小型封裝文件創建一個套管重定向
我在Amazon S3上有一個靜態網站主機。在它所有的文件都是小寫字母,例如:file.html
我要尋找一個腳本/程序/工具找到一個S3網站的所有小寫字母文件,並創建多個套管301重定向。
E.g.創建File.html
和FILE.html
兩個文件,並使用新的301重定向功能將請求以大寫字母重定向到小寫字母真實文件。
請指教
這裏的情況:在Amazon S3中爲小型封裝文件創建一個套管重定向
我在Amazon S3上有一個靜態網站主機。在它所有的文件都是小寫字母,例如:file.html
我要尋找一個腳本/程序/工具找到一個S3網站的所有小寫字母文件,並創建多個套管301重定向。
E.g.創建File.html
和FILE.html
兩個文件,並使用新的301重定向功能將請求以大寫字母重定向到小寫字母真實文件。
請指教
我已經砍了一個腳本,做你想做的。這種做法並不完善,但應該做到這一點。我把它放在GitHub的https://github.com/mikewirth/s3-caseredirect。
用法: python makeredirects.py access_code secret bucketname key_for_your_file
我已經試過它使用重定向規則設有一個版本,但沒有奏效,因爲有大約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中輸入內容)進行控制訪問?如果它在您的網站上,您可以僞造一個htaccess重寫規則(例如http://stackoverflow.com/questions/9003486/completely-fake-url-with-htaccess)在調用S3內容之前將請求轉換爲小寫? – Offbeatmammal
Hi @Offbeatmammal,我直接在S3上使用新網站功能託管網站,所以我沒有使用cloudfront。我嘗試搜索,如果S3支持htaccess但沒有運氣 –