2013-04-20 128 views
3

我在S3上託管靜態網站。爲了將我的網站推向亞馬遜,我使用了s3cmd命令行工具。除了將內容類型設置爲text/html;charset=utf-8以外,所有工作都正常。設置AWS S3上託管的靜態網站的內容類型

我知道我可以在HTML文件的元標記中設置字符集,但我想避免它。

這裏是我使用的準確命令:

s3cmd --add-header='Content-Encoding':'gzip' 
    --add-header='Content-Type':'text/html;charset=utf-8' 
    put index.html.gz s3://www.example.com/index.html 

這裏是我的錯誤:

ERROR:S3錯誤:403(SignatureDoesNotMatch):我們計算請求籤名不匹配您提供的簽名。檢查你的密鑰和簽名方法。

如果我從上述命令中刪除;charset=utf-8部分,它的工作原理是,但Content-Type設置爲text/html而不是text/html;charset=utf-8

回答

13

兩步法解決你的問題。

(1)升級您的S3cmd安裝。版本1.0.x不具備設置字符集的功能。從master on github安裝。 Master包含此(1)bug和此(2)bug的修補程序,這些修補程序導致無法識別早期版本中內容類型的格式和「先前定義之前調用」問題。

從主OSX上安裝s3cmd請執行以下操作:

git clone https://github.com/s3tools/s3cmd.git 
cd s3cmd/ 
sudo python setup.py install (sudo optional based on your setup) 

確保您的Python庫是在您的路徑中加入以下到您的.profile或.bashrc或者.zshrc(再次,取決於你的系統)。

export PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:$PATH" 

但如果您使用自制軟件可能會導致衝突 - 所以 - 只是符號鏈接到可執行文件。

ln -s /Library/Frameworks/Python.framework/Versions/2.7/bin/s3cmd /usr/local/bin/s3cmd 

關閉終端並重新打開。

s3cmd --version 

仍將輸出

s3cmd version 1.5.0-alpha3 - but its the patched version. 

(2)升級後,使用:

s3cmd --acl-public --no-preserve --add-header="Content-Encoding:gzip" --add-header="Cache-Control:public, max-age=86400" --mime-type="text/html; charset=utf-8" put index.html s3://www.example.com/index.html 

如果上傳成功,並設置在Content-Type爲「text/html的;字符集= utf-8「,但你看到這個過程中的錯誤:

WARNING: Module python-magic is not available... 

我更喜歡沒有python-magic的生活 - 我發現如果你沒有專門設置mime類型,python-magic經常猜測錯誤。安裝python-magic,但一定要在s3cmd中設置mime-type =「application/javascript」,否則python-magic會猜測它是「application/x-gzip」,如果你在本地gzip你的js。

安裝python-魔法:

sudo pip install python-magic 

PIP隨着近期OSX升級打破了,所以你可能需要更新PIP:

sudo easy_install -U pip 

這將做到這一點。所有這一切都與S3cmd同步 - 不只是放在。我建議你將s3cmd同步放入一個thor類型的任務中,這樣你就不會忘記在任何特定的文件上設置mime類型(如果你對gzip文件使用python-magic)。

This is a gist of an example thor task for deploying a static Middleman site to s3.此任務允許您在本地重命名文件並使用s3cmd同步,而不是使用S3cmd put來逐個重命名它們。

+0

感謝您的回答。 s3cmd --version顯示我正在使用1.5.0-alpha1。我嘗試使用--mime-type,正如你之前提出的那樣,但後來我得到了一個不同的錯誤:UnboundLocalError:在分配之前引用的本地變量'content_encoding' – cutemachine 2013-04-26 09:52:10

+0

更改了答案以反映只有主人 - 而不是早期的軟件包解決這兩個問題。 – DPF 2013-04-26 19:17:59

+0

添加了從git repo安裝s3cmd的指示 – DPF 2013-04-26 20:42:02