2013-11-28 227 views
12

我試圖將我的靜態網站上傳到我的s3存儲桶。我設法做到了這一點。我創建了my_bucket,然後創建了一個名爲test_folder的sub_bucket,並在其中上傳了我所有的CSS,html,js文件。S3靜態網站索引文件

它看起來現在這個樣子:

my_bucket/ 
    test_folder 
    index.html 

,我能查看我的index.html,horray! :d。但我的問題是,在建立索引文件,因爲的index.html所在的sub_bucket:test_folder/index.html的,當我試圖挽救它,給我的

IndexDocument後綴不能很好地形成

是否有可能中的index.html在sub_bucket鏈接?如果是,如何?如果沒有,是否有其他方法來實現這一目標?我在這裏有一個屏幕截圖link

回答

15

雖然經常用於不同的目的,但索引文檔最初的目的是從概念上來說是每個文件夾中所有文件的「索引」(目錄列表或其他內容摘要),所以這個配置參數指定索引文檔爲整個存儲桶中的每個文件夾返回,如果這樣的文檔存在於文件夾 ......這對於整個存儲桶來說不是一個單獨的配置「事物」。

如果您嘗試配置已經被S3所接受,這將有以下影響,假設「example.com」水桶名稱:

browser address bar   file (object) actually returned 
--------------------------- ------------------------------------ 
http://example.com   example.com/test/index.html 
http://example.com/help  example.com/help/test/index.html 
http://example.com/foo/test example.com/foo/test/test/index.html 

這似乎不太可能,這是你真正意。

但是,索引文件的工作原理是......它們在概念上旨在與目錄層次結構中每一層的其他內容相關聯,這當然可以是文件的實際列表,或者可以是「索引」中的任何「頁面」的範圍要廣泛和模糊一般,例如您希望訪問者在訪問您網站上的特定「目錄」時看到的着陸頁,這當然是在現代網絡通常不是概念化爲「目錄」,而是簡單地稱爲「頁面」。

因此,索引文檔必須立即在相同的/定界符下,並且在其自己的規範中不能包含額外的/

example.com的索引​​文件必須存儲在example.com/index.html(假設「index.html」是您選擇的索引文件名) - 它必須存儲在「目錄」中索引,就像在傳統的Web服務器上一樣,在某些配置中,Web服務器將實際顯示文件的目錄列表,「索引」頁面在「索引」頁面實際存在的情況下替換該目錄列表。當然,S3沒有默認的目錄列表頁面功能。

http://docs.aws.amazon.com/AmazonS3/latest/dev/IndexDocumentSupport.html

與此相反的索引文件,錯誤文件,如果你配置它,就是無論在哪裏,鬥內,404發生時使用的全局配置,所以斜線在支持條目。 AWS控制檯提示對於兩個條目的性質提示很明顯,它們的行爲如此不同以至於它們在視覺上應該更加分離。


你會注意到,「子鬥」不是實際來看,對你所描述的,這與它的鍵(路徑),這給被嵌套在外觀分隔符對象在一個目錄或文件夾下。

爲清楚起見,我用的詞「文件夾」和「目錄」很隨意地遍佈所有這個答案,與傳統意義......但是對於技術的準確性,我會提的是S3的對象是不是真的在內部存儲以分層的方式「在目錄中」。它以這種方式出現,並且出於實際的目的,它是這樣工作的;然而,實際上,/字符雖然接近於對象密鑰中的另一個字符,但由於其常規用作目錄分隔符而得到了一些特殊處理,但它不同於一些更傳統的文件系統。由於S3的S3 internally hashes the key(「路徑」)是不存在的,因此不需要像傳統文件系統中需要的那樣管理與每個目錄中的「文件在一起」每個對象用於其內部存儲分區邏輯。

+0

我爲什麼要索引文件指向我的'test_folder/index.html'怎麼把我的桶裏面我有其他的'folders'的原因。而且當我訪問我的瀏覽器'http:// mybucket/test_folder'給了我一個'訪問被拒絕的問題' – user2720708

+1

這似乎是一個非常囉嗦的答案,說「把你的index.html放在根目錄下」。 –

+2

然後,您可能需要再次閱讀它,因爲這不是它所說的。索引文檔名稱是*名稱*,而不是*路徑*。把它們放在你需要它們的地方,但要明白,與錯誤文檔不同,它們是合格/解決上下文的。 –

4

我也有這個問題。基於Michael的回答,我開發了此變通辦法:

在Amazon S3存儲桶屬性中,將索引文檔:值設置爲任意值(我使用'index.htm'並且沒有index.htm文件然後將Error Document:值設置爲用戶發送到的任何位置(test_folder/index.html)。

請記住,您網站上的任何404錯誤消息都會我知道這是一個可怕的工作,但它似乎爲我工作,任何其他建議感激地接受!

+0

我並不陌生,聰明的黑客,這是相當聰明的,但問題是,這可能無法跨瀏覽器,因爲即使S3返回指定的錯誤頁面的內容,它仍然*設置HTTP響應代碼爲404不是發現:*「但是請注意,當發生錯誤時,某些瀏覽器會顯示自己的錯誤消息,而忽略Amazon S3返回的錯誤文檔。例如,如果發生HTTP 404 Not Found錯誤,Chrome可能會顯示自己的錯誤,而忽略錯誤文件稱,亞馬遜S3的回報。「* http://docs.aws.amazon.com/AmazonS3/latest/dev/CustomErrorDocSupport.html –

+0

@邁克爾sqlbot這是正確的,但你可以使用CloudFront的改變錯誤代碼200 – hcarreras

+0

@hcarreras也是如此,雖然它返回錯誤的代碼真的不好。我的這個評論是相當古老的,今天我的建議是驗證錯誤文檔的長度足以抑制任何內置錯誤,必要時可以使用大的註釋塊。 –

0

嘗試填充index.html在「索引文檔」單元格

4

我一直在嘗試做同樣的事情(從s3靜態發佈)並閱讀這篇文章讓我意識到,你需要放置索引文件(例如, 'index.html')以外的任何文件夾的

我有我的索引文件在模板文件夾。我已經閱讀了文檔,但是我非常沮喪,我不明白它的真實含義。有時,真正愚蠢的錯誤是最難解決的。希望這有助於某人。