Estou usando o mod_rewrite para reescrever URLs como este:
http://example.com/1,2,3,4/foo/
Ao fazer isso no .htaccess:
RewriteEngine On
RewriteRule ^([\d,]+)/foo/$ /foo.php?id=$1 [L,QSA]
Funciona bem, exceto quando "1,2,3,4" se transforma em uma sequência com mais de 255 caracteres, o Apache retorna um "403 Proibido".
Não há nenhum problema em visitar foo.php?id=1,2,3,4
diretamente, mesmo com uma sequência de caracteres muito longa, mas isso não é uma opção para mim.
Existe algum Apache ou outra configuração que eu deva ajustar?
ATUALIZAÇÃO : ativei o RewriteLog com o RewriteLogLevel 9. Com uma sequência de identificação curta, recebo várias linhas no meu arquivo de log. Mas quando a cadeia de caracteres de ID é maior que 255 caracteres, nada é registrado (parece que o mod_rewrite nem está sendo executado?).
Se você acha esta pergunta interessante / útil, faça um voto positivo.
RewriteLog
e RewriteLogLevel
para que você possa ver o que está sendo correspondido e como realmente está sendo reescrito. Eu acho que apenas 255 caracteres estão sendo copiados $1
e isso acaba sendo um id
que o cliente não está autorizado a ver, então o Apache retorna o 403. Eu não olhei o código, mas pode ser que o Apache manipule a referência anterior em um buffer fixo de 256 bytes (o 256º é reservado para o NULL final).