使用.htaccess更改网址会丢失内容

时间:2013-06-20 09:44:54

标签: php .htaccess

我正在创建一个简单的CMS,因此页面链接是domain/index.php?page=1等等(第2页,第3页......),我将内容从数据库中拉出来,其中包含以下行:

$q = "SELECT name, content FROM pages WHERE page_id=$page";

一切正常,但我想改变网址的外观,所以我在.htaccess中使用了以下内容

RewriteRule ^([A-Za-z]+)/?$    index.php?page=$1    [NC,L]

问题是,现在当我点击页面时我更改了url(在这种情况下它是?page = 2),我不会将内容从db中拉出来,我猜是因为MySQL查询无法找到$page

我该如何解决这个问题?

修改

我更新了规则以包含数字字符,但它仍然是相同的。

RewriteRule ^([A-Za-z0-9]+)/?$    index.php?page=$1    [NC,L]

EDIT2:

只是为了重点回家,如果我在重写规则中硬编码page=2它可以工作,但显然我希望动态发生。在这种情况下,$1应该成为2

1 个答案:

答案 0 :(得分:0)

你确定

$q = "SELECT name, content FROM pages WHERE page_id=$page";

直接取自您的代码?它有一些非常严重的问题:

  • 您可能(并且理所当然地)没有启用register_globals。因此$page实际上应该是$_GET['page']
  • 您的查询容易受到攻击,您应始终mysql_real_escape_string()参数进入您的查询。
  • 用户可以输入非数字值。那些不会被捕获但可能最终会出现语法错误。

我的建议?自己写这些东西毫无意义。而是使用现有的现代CMS或框架。你最终创造的99%的错误和安全漏洞已经被考虑在内了。