2011-12-23 29 views
11

uso .htaccess y tengo una regla que me permite buscar dinámicamente el producto en mi base de datos..htaccess con productos (cadena)

por lo que alguien puede hacer clic en un enlace como este:

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

y ver el producto. Ahora mi problema es que cuando uso

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

no funciona,

por qué? aquí es mis reglas:

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

Respuesta

12

No funciona porque no tiene ninguno A-Z o la bandera [NC].

El uso del indicador [NC] hace coincidir el RewriteRule en una case-insensitive manera. Es decir, no importa si las letras aparecen como mayúsculas o minúsculas en el URI coincidente.

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] 

I añade la L:

El [L] bandera hace que mod_rewrite para detener el procesamiento del conjunto de reglas. En la mayoría de los contextos, esto significa que si la regla coincide, no se procesarán más reglas . Esto corresponde al último comando en Perl, o el comando break en C. Use este indicador para indicar que la regla actual se debe aplicar inmediatamente sin considerar otras reglas.

y la bandera QSA:

Cuando la sustitución URI contiene una cadena de consulta, el comportamiento predeterminado de RewriteRule es descartar la cadena de consulta existente y sustituirlo con el recién generada. El uso del indicador [QSA] hace que las cadenas de consulta se combinen.

Más información acerca de las banderas: http://httpd.apache.org/docs/2.3/rewrite/flags.html

TIP: si usted está buscando para los productos utilizando el nombre, es posible que vea retraso en la consulta, speically si usted no tiene un índice. Deberías investigar esto antes de que se ponga feo.

+0

+1 para el indicador '[NC]'. No sabía sobre eso. –

+0

gracias, funciona, voy a dormir más inteligente esta noche, gracias por la explicación también, muy útil. – dale

+0

¡Bienvenido, y bienvenido a stackoverflow! –

2

Solo busca letras minúsculas (y números). Necesita agregar letras mayúsculas.

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