是否可以在动态网站上重写网址?

时间:2011-12-01 04:55:42

标签: html url

我对这个问题做了很多研究,我不是盲目地问,但是我无法理解这个概念。所以我的网站包含一个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现在只是动态地拉动数据还是页面必须是静态的?

2 个答案:

答案 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