переписать URL для названия продукта - PullRequest
17 голосов
/ 25 декабря 2011

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

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

123-name означаетproduct id = 123 и name = name

, поэтому в моем php я могу получить $ _GET [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

почему?

Ответы [ 2 ]

17 голосов
/ 25 декабря 2011

Первое: у вас есть синтаксическая ошибка. [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 , ваш скрипт небезопасен. Вы можете исправить это, используя mysql_real_escape_string .

0 голосов
/ 25 декабря 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...