2011-09-23 41 views
2

我一直在觀看Backbone.js上的PeepCode的截屏視頻,並且已經完成了它的編碼。Backbone.js pushState不起作用,並提供404錯誤

我已經完成了第一部分,現在,我有一個這樣的路由器:

routes: { 
    '': 'home', 
    'blank': 'blank' 
} 

而且我有這個啓動應用程序:現在

$(function(){ 
    window.App = new BackboneTunes(); 
    Backbone.history.start({pushState: true}); 
}); 

,如果我鍵入http://localhost:9292/#blank在URL欄中,它將我重定向到http://localhost:9292/blank,但如果我直接鍵入http://localhost:9292/blank,它會給出404消息。

這是正常的還是我在這裏有錯誤?

在此先感謝。

回答

4

您需要設置您的服務器以返回Backbone路由到的所有URL的相同頁面。現在,它只從根網址提供頁面。

+0

它工作完美。 –

+0

我遇到同樣的問題。我是否需要創建我的服務器上路由的整個結構,但空文件? –

8

對於那些認爲上述答案不夠充分的人:你想要做的是讓你的服務器將所有的URL重新路由到你的index.html頁面,在那裏Backbone.js會爲你處理路由。以下步驟可讓您在保持地址欄中的URL不變的情況下執行此操作。

如果您使用Apache作爲容器,則需要在應用程序的.htaccess文件中啓用mod_rewrite模塊。

裏面你的httpd文件:

1)請確保您的文檔根目錄的「替換」命令,啓用「覆蓋所有」,而不是「覆蓋無」

2)啓用了mod_rewrite。所以模塊通過取消註釋這一行:

的LoadModule rewrite_module模塊/ mod_rewrite.so

內,您的申請ication的.htaccess文件(如果你沒有一個,創建一個):

1)如果你有一個IfModule mod_rewrite.c模塊已經寫好,然後將這些行復制到一個模塊中:

RewriteEngine敘述在
重寫規則^/[A-ZA-Z0-9] + [/]?$ /index.html [QSA,L]

你應該有一些看起來LIK E本:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteRule ^/[a-zA-Z0-9]+[/]?$ /index.html [QSA,L] 
</IfModule>

編輯

注:在Apache中2.2+,您現在可以使用FallbackResource代替mod_rewrite的,它需要較少的線路和完成同樣的事情。