重写产品名称的网址

时间:2011-12-25 16:32:11

标签: php mysql apache .htaccess mod-rewrite

我想为我的产品重写规则。

我想用url分隔的id和name,如下所示:

  

123-name表示产品ID = 123和name = name

所以在我的php中我可以得到$ _GET [id],然后使用这个id来查询我的数据库:

$sql = "SELECT * from Products Where productid = " . $_GET[id];

这就是我所拥有的:

RewriteEngine On
RewriteRule ^products/([0-9+])\-([a-z]+)/?$ products.php?id=$2 [NC,L] 

但是当我把它作为网址时,我得到了一个404

为什么?

2 个答案:

答案 0 :(得分:17)

首先:您遇到语法错误。 [0-9+]是一个字符类,可以匹配(i)09范围内的数字,或(ii)+符号。要将+用作量词(按预期),请在+后移动],如下所示:([0-9]+)

第二:您在商品中使用的是$2,这是产品名称。如果您想使用ID,则必须使用$1

以下是您需要使用的内容:

RewriteEngine On
RewriteRule ^products/([0-9]+)\-([a-z0-9_\-]+)/?$ products.php?product_id=$1 [NC,L,QSA]

我添加了产品编号,破折号和下划线,以防有一天你需要它。

<强>第三 你应该知道sql injections,你的脚本不安全。您可以使用mysql_real_escape_string修复此问题。

答案 1 :(得分:0)

我认为您应该使用products.php?id = $ 1,因为匹配的第一个参数是产品ID。