2011-12-25 16 views
17

Chcę przepisać regułę dla moich produktów.Przepisz adresy URL dla nazwy produktu

chcę użyć identyfikatora i nazwy w adresie URL, oddzielone kreską tak:

123-nazwa oznacza ID produktu = 123 i name = nazwa

więc w moim php mogę uzyskać $ _GET [id], a następnie kwerendy mojej bazy danych za pomocą tego identyfikatora takiego:

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

oto co mam:

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

ale kiedy kładę to jako url, otrzymuję 404

dlaczego?

Odpowiedz

17

Po pierwsze: Masz błąd składniowy. [0-9+] to klasa znaków, która może łączyć (i) cyfry w zakresie od 0 do 9 lub (ii) znak +. Aby użyć + jako kwantyfikatora (zgodnie z przeznaczeniem), przenieś + po ], tak jak: ([0-9]+).

Po drugie: Używasz w swojej pozycji $2, która jest nazwą produktu. Jeśli chcesz użyć identyfikatora, musisz użyć $1.

Oto co trzeba użyć:

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

dodałem w liczbie produktów, myślnika i podkreślenia w przypadku, gdy jest to potrzebne w przyszłości.

trzecie: Należy zdawać sobie sprawę z sql injections, skrypt nie jest bezpieczny. Możesz to naprawić, używając mysql_real_escape_string.

+0

Dziękuję bardzo za te informacje. – natalia

+0

jesteś bardzo mile widziany –

0

Myślę, że powinieneś użyć products.php? Id = 1 $, ponieważ pierwszy dopasowany argument jest identyfikatorem produktu.

Powiązane problemy