2011-12-23 11 views
11

uso .htaccess e ho una regola che mi consente di cercare dinamicamente il prodotto nel mio database..htaccess con prodotti (stringa)

così qualcuno può cliccare su un link come questo:

www.domain.com/product/modular-plastic-lunch-set.html 

e vedere il prodotto. Ora il mio problema è che quando uso

www.domain.com/product/Modular-Plastic-Lunch-Set.html 

non funziona,

perché? ecco le mie regole:

RewriteEngine On 
RewriteRule ^product/([a-z0-9\-]+).html$ products.php?name=$1 

risposta

12

Non funziona perché non si dispone né A-Z o la bandiera [NC].

uso della [NC] flag causa la RewriteRule da abbinare in modo caso-insensitive. Cioè, non importa se le lettere appaiono come maiuscole o minuscole nell'URI corrispondente.

RewriteRule ^product/([a-z0-9\-]+).html$ php.php?name=$1 [NC,L,QSA] 

o

RewriteRule ^product/([a-zA-Z0-9\-]+).html$ php.php?name=$1 [L,QSA] 

ho aggiunto L:

La [L] flag causa mod_rewrite per interrompere l'elaborazione del set di regole. Nella maggior parte dei contesti , ciò significa che se la regola corrisponde, non verranno elaborate ulteriori regole . Corrisponde all'ultimo comando in Perl o al comando break in C. Utilizzare questo flag per indicare che la regola corrente deve essere applicata immediatamente senza considerare ulteriori regole.

e QSA bandiera:

Quando la sostituzione URI contiene una stringa di query, il comportamento predefinito di RewriteRule è quello di eliminare la stringa di query esistente, e sostituirlo con il appena generato uno. Usando il flag [QSA] si combinano le stringhe della query.

Maggiori informazioni su bandierine: http://httpd.apache.org/docs/2.3/rewrite/flags.html

SUGGERIMENTO: se siete alla ricerca di prodotti utilizzando il nome, si potrebbe vedere ritardo nella tua ricerca, speically se non si dispone di un indice. Dovresti esaminarlo prima che diventi brutto.

+0

+1 per il flag '[NC]'. Non lo sapevo. –

+0

grazie funziona, dormirò più intelligente stasera - grazie anche per la spiegazione, molto utile. – dale

+0

prego, e benvenuti a StackOverflow! –

2

Stai cercando solo lettere minuscole (e numeri). È necessario aggiungere lettere maiuscole.

RewriteEngine On 
RewriteRule ^product/([A-Za-z0-9\-]+).html$ products.php?name=$1 
Problemi correlati