2011-05-09 39 views
21

我創建的一個小網站(更像是小提琴)使用AJAX加載每個頁面。以前我正在改變網址的散列,這個工作很好,但很醜,用戶可以刷新頁面,它會保持在同一頁面上。如何應對使用JS History API刷新頁面的更新頁面

現在我已經切換到在JS歷史API中使用pushState,這看起來好多了,後退和前進的工作,但刷新沒有。例如:

轉到:http://example.com/page2轉到404,因爲沒有稱爲頁面2的實際頁面。但是,如果我單擊使用pushState方法更改網址的按鈕,它的工作方式應該如此。

如何使用新的歷史API允許刷新和永久鏈接? (谷歌必須通過將開發者切換到#!來創建索引哈希URL的方式,是否有可能在將來爲歷史API做類似的事情? )

回答

18

根本不應該使用pushState來推送無效的URL。它意味着在網站同時使用和不使用AJAX的情況下使用 - 即當您使用AJAX創建此輸出時,您推送的URL將導致在沒有AJAX的情況下輸出相同的內容。

如果你只想要虛擬URL(就像在pre-pushState時代),繼續使用哈希標籤。

2

我必須將404錯誤重定向到網站主頁(加載AJAX請求的網頁),然後獲取URL的最後一個組件,然後運行使用AJAX請求加載頁面的JavaScript函數。不是一個很好的解決方案,但它似乎運作良好。

8

這是一個有點老的問題,但它是谷歌的頂級成績之一。在追求幫助,這是我的解決方案。

您可以使用Apache的Mod_Rewrite將URL重寫爲中心位置。 例如: example.com/p2從example.com/index.php?page=p2 獲取其頁面內容您可以保留當前實現的History API和AJAX以獲取內容並在您的內容中包含以下內容。 htaccess的

<ifModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteRule ^([^/\.]+)/?$ index.php?page=$1&full=1 [L] 
</ifModule> 

在你的index.php:

<?php 
    if(isset($_GET['full']) { 
    //Generate the full page here 
    }else{ 
    //Generate just the content for AJAX 
    } 
?> 

This Page是使用mod_rewrite重定向整個網站一個很好的入門。 (評論11 & 13也有其他增加)