Necesito una condición de reescritura para devolver, por ejemplo, 403, cuando una consulta contiene caracteres que no están en mi clase de caracteres "en la lista blanca". La consulta comienza con q= Así que mi intento fue:
RewriteCond %{REQUEST_URI} ^/generic/ RewriteCond %{REQUEST_METHOD} ^GET$ RewriteCond %{QUERY_STRING} q=[^az]+ RewriteRule .* - [F]Está funcionando casi. El único problema es que, cuando la consulta comienza con, por ejemplo, "a", los siguientes caracteres de la lista negra no activan la regla.
Ejemplo:
q=abc -> rule does not match -> fine q=Abc -> rule matches -> fine q=abC -> rule does not match -> not fineEntonces, cuando los caracteres prohibidos no son el primer carácter después de "q=", la regla no funciona.
¿Qué me estoy perdiendo? ¿Alguien me puede ayudar?
BR
Con sus intentos mostrados, intente seguir el archivo de reglas de htaccess. 2 puntos importantes aquí, primero puede usar ^ a pesar de .* en la última regla de prohibición. En segundo lugar, debe usar NC para cubrir minúsculas para que coincidan con letras pequeñas y mayúsculas en expresiones regulares.
RewriteCond %{REQUEST_URI} ^/generic/ [NC] RewriteCond %{REQUEST_METHOD} ^GET$ [NC] RewriteCond %{QUERY_STRING} q=[^az]+ [NC] RewriteRule ^ - [F] O use las siguientes reglas para hacer coincidir la cadena de consulta exacta use los anclajes ^ y $ para hacer coincidir el valor exacto de la cadena de consulta:
RewriteCond %{REQUEST_URI} ^/generic/ [NC] RewriteCond %{REQUEST_METHOD} ^GET$ [NC] RewriteCond %{QUERY_STRING} ^q=[^az]+$ [NC] RewriteRule ^ - [F]