Estoy usando mod_rewrite para reescribir URL como esta:
http://example.com/1,2,3,4/foo/
Al hacer esto en .htaccess:
RewriteEngine On
RewriteRule ^([\d,]+)/foo/$ /foo.php?id=$1 [L,QSA]
Funciona bien, excepto cuando "1,2,3,4" se convierte en una cadena de más de 255 caracteres, Apache devuelve un "403 Prohibido".
No hay ningún problema para visitar foo.php?id=1,2,3,4
directamente, incluso con una cadena de identificación muy larga, sin embargo, esta no es una opción para mí.
¿Hay algún Apache u otra configuración que deba modificar?
ACTUALIZACIÓN : encendí RewriteLog con RewriteLogLevel 9. Con una cadena de identificación corta, obtengo varias líneas en mi archivo de registro. Pero cuando la cadena de identificación es mayor que 255 caracteres, no se registra nada (¿parece que mod_rewrite ni siquiera se está ejecutando?).
Si encuentra esta pregunta interesante / útil, favor de votarla.
RewriteLog
y RewriteLogLevel
así podrá ver qué coincide y cómo se está reescribiendo realmente. Supongo que solo se están copiando 255 caracteres $1
, y eso termina siendo algo id
que el cliente no está autorizado a ver, por lo que Apache devuelve el 403. No he mirado el código, pero podría ser que Apache manipula la referencia inversa en un búfer fijo de 256 bytes (el 256 está reservado para la terminación NULL).