我对这个问题做了很多研究,我不是盲目地问,但是我无法理解这个概念。所以我的网站包含一个index.php文件,它通过ajax将数据加载到div中,因此页面永远不会刷新,网址永远不会改变。我现在知道我需要使用url重写链接到某些内容。该网站包含帖子,因此例如所有帖子都从数据库中提取,“site.com”是网址。但我希望能够做'site.com/post-one'并将该链接转到该帖子。我想首先我需要将一个变量附加到url的末尾,当这个帖子的动态内容被加载时:site.com?post = 1所以从那里我可以使用url重写;我遇到的问题是这个。由于post 1的内容将被加载到div中,如果我走这条路线,并实现了url重写,那么site.com/post-1现在只是动态地拉动数据还是页面必须是静态的?
答案 0 :(得分:0)
你使用mod_rewrite的想法似乎很合理。如果你使用了一个将部分URI作为POST变量传递到index.php的重写指令,那么你是不是可以在索引文件的顶部抛出一些代码来检查那些数据,然后动态生成ajax以转储到div?
例如:
RewriteRule ^(.*)$ index.php?post=$1 [L]
的index.php:
<?php if (isset($_POST['post'])) { ?>
$.ajax({
**grab post content dump into div**
});
<?php } ?>
另外,在处理之前不要忘记清理$ _POST数据。
答案 1 :(得分:0)
您的问题是,这必然需要使用散列而不是GET变量(因为GET需要页面刷新,散列不需要)。这是通过在JavaScript中使用window.location.hash
变量来完成的,每当#更改后的网址内容发生更新时(例如:如果我要将http://site.com/#lol
更改为http://site.com/#lmao
,{{ 1}}会从window.location.hash
更改为#lol
)。哈希在基于Ajax的导航网站中经常被使用,例如Twitter(我认为谷歌也在实施它)。
如果你正在使用jQuery,你应该试试jQuery BBQ plugin这将允许你做一些事情,比如哈希变化检测(否则,你将不得不自己实现某种类似的引擎,因为它将是任何类型的基于散列的导航都需要。)
但是你应该记住,这与mod_rewrite没有任何关系,因此你不需要添加任何类型的重写规则。您的所有工作(获取数据等)都将通过Ajax XML HTTP请求完成,而不是通过常见的HTTP请求。
使用此功能,您可以使自己的网址看起来像#lmao
(这可以是您想要的任何格式,例如http://site.com/#!/post/1
),而不是http://site.com/#!/p/this-is-the-posts-title
,尽管您会丢失在http://site.com/?post=1
。