Un .htaccess presenta un conjunto de reglas para rechazar algunas URL mal formadas como, por ejemplo:
RewriteCond %{QUERY_STRING} (select|\/\*\*\/) [NC] RewriteRule ^ - [F,L]¿Cómo puedo obtener un registro de todas las URL rechazadas?
¿O cuál es la mejor manera de registrar de manera eficiente o temporal estas URL rechazadas?
[EDITAR con más contexto:] Mi sitio a veces se cae debido a los intentos excesivos de los hackers de encontrar una forma de entrar. Para evitar eso, he configurado algunas reglas en el .htaccess que rechazan los patrones más comunes que se encuentran en las URL de los hackers. Esto funciona bien, o al menos parece que funciona bien. Ahora deseo (una vez cada cierto tiempo) comprobar si
Para hacerlo, podría crear un script que aplique exactamente las mismas reglas (tomadas de htaccess) a los access.logs de apache que contienen todas las solicitudes. Pero requeriría sincronizar el script cada vez que actualice htaccess. Por lo tanto, deseo saber si hay una configuración o una "buena" forma de registrar todas y solo las direcciones URL rechazadas por htaccess.
Empiezo a entender ahora con el comentario adicional que hiciste arriba. Lo que pregunta en realidad no está claro de lo que escribió en su pregunta. Usted escribió "un registro de todas las URL rechazadas", entendí de las URL solicitadas y rechazadas, porque eso es lo que trata un servidor http. Pero ahora entiendo que en realidad no está interesado en las URL en absoluto, sino en una lista de todas las posibles cadenas de consulta que coincidan con esa condición. Estamos hablando aquí de informática teórica, lenguajes artificiales, una parte de la teoría de la complejidad.
Lo que pides no es posible. La razón es que la lista que pides es infinitamente grande, obviamente. Entonces, todo lo que puede hacer es configurar un algoritmo que cree una cadena coincidente tras otra a lo largo de un conjunto de reglas específico. Pero me atrevo a decir que esto realmente no ayudará, el conjunto de reglas real es probablemente más interesante para ti...
Lo expresaría de esta manera: su expresión regular coincidirá con la cadena que contiene una de las dos subcadenas "seleccionar" o "/**/" en cualquier lugar, por lo que al principio, en el medio o al final, independientemente de lo que sea antes y después de eso. Echa un vistazo a esto: https://regex101.com/r/tHkqZE/1 Allí, "foo" y "bar" pueden ser cualquier cosa ...
Tal vez quieras limitar ese conjunto. Un primer paso, probablemente un paso, sería anclar la expresión al principio o al final de la cadena completa o en el carácter "&", considerando la construcción típica de una cadena de consulta.
Como lo mencionó @arkascha, el estado de manejo de Apache para cada solicitud se indica en el archivo access.log de Apache. Así que lo mejor es obtenerlo desde allí.