Подтвердить что ты не робот

Переписать URL-адреса для названия продукта

Я хочу переписать правило для своих продуктов.

Я хочу использовать идентификатор и имя в URL-адресе, разделенном тире следующим образом:

123-name означает идентификатор продукта = 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] 

но когда я ставлю это как url, я получаю 404

почему?

4b9b3361

Ответ 1

Во-первых: у вас есть синтаксическая ошибка. [0-9+] - это класс символов, который может соответствовать (i) цифрам в диапазоне от 0 до 9 или (ii) знака +. Чтобы использовать + в качестве квантификатора (как предполагалось), переместите + после ], например: ([0-9]+).

Вторые: Вы используете $2 в своем элементе, который является именем продукта. Если вы хотите использовать идентификатор, вы должны использовать $1.

Вот что вам нужно использовать:

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

Я добавил в номера продуктов, тире и подчеркивание, если вам это понадобится когда-нибудь.

Третье: Вы должны знать sql injection, ваш script небезопасен. Вы можете исправить это, используя mysql_real_escape_string.

Ответ 2

Я думаю, вы должны использовать products.php? id = $1, потому что первый сопоставленный аргумент - это идентификатор продукта.