2011-12-01 150 views
0

我對這個問題做了很多研究,我不是盲目地問,但我無法理解這個概念。所以我的網站包含一個index.php文件,通過ajax將數據加載到div中,所以頁面不會刷新,url也不會改變。我現在知道我需要鏈接到使用url重寫的某些內容。該網站包含帖子,所以例如所有帖子都從數據庫中提取,'site.com'是網址。但我希望能夠做'site.com/post-one',並有該鏈接去那個帖子。我想首先我需要追加一個變量到URL的末尾,當這個帖子的動態內容被加載,因此:site.com?post=1所以從那裏我可以使用URL重寫;我遇到的問題是這個。由於post 1的內容將被加載到一個div中,如果我去了這條路線,並且實現了URL重寫,site.com/post-1現在只需要動態地拉動數據,或者頁面必須是靜態的?是否可以在動態網站上進行網址重寫?

回答

0

你的問題是,這將需要使用散列,而不是GET變量(因爲GET需要頁面刷新,散列不)。這是通過在JavaScript中使用window.location.hash變量完成的,該變量在#變化後(例如:如果我要將http://site.com/#lol更改爲http://site.com/#lmaowindow.location.hash將從#lol更改爲#lmao)更新。哈希常用於基於Ajax的導航網站,例如Twitter(我認爲Google也在實施它)。

如果您使用的是jQuery,您應該嘗試jQuery BBQ plugin,這將允許您執行諸如哈希變化檢測之類的操作(否則,您必須自己實現某種類似的引擎,因爲它將用於任何一種基於散列的導航)。

但是,您應該記住,這與mod_rewrite沒有任何關係,因此您不需要添加任何類型的重寫規則。您的所有工作(獲取數據等)都將通過Ajax XML HTTP請求完成,而不是通常的HTTP請求。

利用這一點,你可以讓你的URL看起來像http://site.com/#!/post/1(這可以去你想要哪個格式,如http://site.com/#!/p/this-is-the-posts-title),而不是http://site.com/?post=1,雖然你會在http://site.com/post/1丟失。

+0

我想我要走你建議朱利安的路線,太棒了,謝謝! – Naterade

+0

這很棒,祝你好運。 –

0

您使用mod_rewrite的想法看起來很合理。如果你使用了一個將URI的一部分作爲POST變量傳遞給你的index.php的rewrite指令,你能不能把一些代碼放到你的索引文件的頂部,它檢查這些數據,然後動態生成ajax以便轉儲divs?

例:

RewriteRule ^(.*)$ index.php?post=$1 [L] 

的index.php:

<?php if (isset($_POST['post'])) { ?> 

$.ajax({ 
    **grab post content dump into div** 
}); 

<?php } ?> 

另外,不要忘記處理它之前清空您的$ _ POST數據。

+0

啊,我想我明白了,所以我將不得不通過PHP創建動態url,這很好。然後,從我的例子中可以看出,如果用戶點擊一個鏈接,$ _POST將被設置,所以我可以運行ajax並以這種方式返回數據。所以從某種意義上說,它有點像一個靜態頁面。 – Naterade