0

我正在制作一个简单的 CMS,所以页面链接是domain/index.php?page=1等等(page2,page3 ...),并且我正在使用以下行将内容从数据库中提取出来:

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

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

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

问题是,现在当我点击页面时,我更改了 url(在这种情况下是 ?page=2),我没有从数据库中提取内容,我猜是因为 MySQL 查询找不到$page

我该如何补救?

编辑:

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

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

编辑2:

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

4

1 回答 1

0

你确定吗

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

是直接取自您的代码吗?它有几个相当严重的问题:

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

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

于 2013-06-20T09:47:11.993 回答