4

我有一個運行在S3上的JavaScript(Backbone)前端,我想要將兩個深層鏈接重定向到同一個索引文件。你通常會在Apache中使用mod_rewrite來做到這一點,但在S3中沒有辦法做到這一點。S3上的骨幹前端的深層鏈接

我已經嘗試設置默認錯誤文檔是一樣的索引文件,並 這部作品表面上,但如果你檢查實際響應狀態的頭部,你會看到頁面回來爲404。這顯然不好。

還有另一種解決方案,它的醜陋,但不是錯誤文檔黑客更好:

事實證明,你可以創建的index.html,然後將其命名爲簡單地等同於子目錄複印件(零下後綴斜槓),例如,如果我克隆index.html並將其命名爲'about',並確保Content-Type設置爲text/html(在元數據標籤中),所有/ about的請求將返回新的'about'是index.html的副本。

顯然,這是解決次優的,只有使用預定義的深層鏈接的目標工作,但如果克隆index.html的步驟是針對前端構建過程的一部分的麻煩可以被減輕。使用Backbone-Boilerplate我可以編寫一個咕嚕任務來做到這一點。

除了這2個哈克解決方法我沒有看到比訴諸hashbangs這樣做其他的方式..

任何建議,將不勝感激。


UPDATE:

S3現在(爲一個,而實際上)支持Index Documents這解決了這個問題。

此外,如果你使用的路線53爲你的DNS管理你可以建立一個alias record指向您的S3存儲,所以你不需要一個子+ CNAME了:)

+0

嗨,索引文檔如何解決您的問題?如果我訪問某個URL並且該文件不存在,我應該使用index.html來提供服務。可以創建一個重定向條件,其中說404時重定向,但在重定向規則中,我們不能提及IndexDocument。 – w2lame 2014-08-12 09:34:54

回答

1

不幸的是,據我所知(我使用s3網站相當多)你是對的錢。 404黑客是如你所說的一個非常糟糕的主意,所以你基本上有以下選擇:

  • 使用某種形式的定期後端,而不是S3
  • Content-Type變通
  • Hashbangs

對不起,是壞消息:)

對我來說,承載,但事實上,你不能真正引導域S3網站的根源是一些m的大忌y的東西。 mod_rewrite類型的場景聽起來像是另一個很好的例子,它只是不起作用。

+1

感謝您確認我的懷疑。 – sgarcez 2012-04-09 08:43:24

1

你嘗試重定向散列嗎?我不確定當你問這個問題時這個S3功能是否可用,但是我能夠使用這些重定向規則在文件夾屬性的靜態web主機部分修復這個問題。

<RoutingRules> 
    <RoutingRule> 
     <Condition> 
      <KeyPrefixEquals>topic/</KeyPrefixEquals> 
     </Condition> 
     <Redirect> 
      <ReplaceKeyPrefixWith>#topic/</ReplaceKeyPrefixWith> 
     </Redirect> 
    </RoutingRule> 
</RoutingRules> 

其餘部分在Backbone.js應用程序中處理。

+1

我在最後一段提到我不想訴諸於此。幸運的是,S3現在支持解決問題的索引文檔:) – sgarcez 2013-06-06 09:27:55