重写产品名称的网址

nat*_*lia 17 php mysql apache .htaccess mod-rewrite

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

我想在URL中使用id和名称,用这样的短划线分隔:

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

所以在我的PHP中,我可以获得$ _GET [id],然后使用此ID查询我的数据库,如下所示:

$sql = "SELECT * from Products Where productid = " . $_GET[id];
Run Code Online (Sandbox Code Playgroud)

这就是我所拥有的:

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

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

为什么?

Boo*_*eus 18

第一:你有语法错误.[0-9+]是一个字符类,它可以匹配在范围(I)位0通过9,或(ii)一个+标志.要使用+量词作为量词(如预期的那样),请移动+],如下所示:([0-9]+).

第二:$2在项目中使用的是产品名称.如果您想使用该ID,则必须使用$1.

这是你需要使用的:

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

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

第三: 你应该知道sql注入,你的脚本不安全.您可以使用mysql_real_escape_string来解决此问题.