J'utilise mod_rewrite pour réécrire des URL comme celle-ci:
http://example.com/1,2,3,4/foo/
En faisant cela dans .htaccess:
RewriteEngine On
RewriteRule ^([\d,]+)/foo/$ /foo.php?id=$1 [L,QSA]
Cela fonctionne très bien, sauf lorsque "1,2,3,4" se transforme en une chaîne de plus de 255 caractères, Apache renvoie un "403 interdit".
Il n'y a aucun problème à visiter foo.php?id=1,2,3,4
directement, même avec une chaîne d'identification très longue, mais ce n'est pas une option pour moi.
Existe-t-il un Apache ou un autre paramètre à modifier?
MISE À JOUR : J'ai activé RewriteLog avec RewriteLogLevel 9. Avec une courte chaîne d'identification, j'obtiens plusieurs lignes dans mon fichier journal. Mais lorsque la chaîne id est supérieure à 255 caractères., Rien n'est enregistré (il semble que mod_rewrite ne s'exécute même pas?).
Si vous trouvez cette question intéressante / utile, veuillez la voter.
RewriteLog
et RewriteLogLevel
ainsi vous pouvez voir ce qui est mis en correspondance et comment il est vraiment en cours de réécriture. Je suppose que seuls 255 caractères sont copiés dans $1
, et cela finit par être un id
que le client n'est pas autorisé à voir, donc Apache renvoie le 403. Je n'ai pas regardé le code, mais il se pourrait qu'Apache manipule la référence arrière dans un tampon fixe de 256 octets (le 256e est réservé pour la terminaison NULL).