2011-12-01 106 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