Sto usando mod_rewrite per riscrivere gli URL in questo modo:
http://example.com/1,2,3,4/foo/
In questo modo in .htaccess:
RewriteEngine On
RewriteRule ^([\d,]+)/foo/$ /foo.php?id=$1 [L,QSA]
Funziona bene, tranne quando "1,2,3,4" si trasforma in una stringa più lunga di 255 caratteri, Apache restituisce un "403 proibito".
Non c'è nessun problema a visitare foo.php?id=1,2,3,4
direttamente, anche con una stringa id molto lunga, tuttavia questa non è un'opzione per me.
C'è qualche Apache o altre impostazioni che dovrei modificare?
AGGIORNAMENTO : Ho attivato RewriteLog con RewriteLogLevel 9. Con una stringa ID breve, ottengo diverse righe nel mio file di registro. Ma quando la stringa id è maggiore di 255 caratteri, non viene registrato nulla (sembra che mod_rewrite non stia nemmeno eseguendo?).
Se trovi questa domanda interessante / utile, per favore votala.
RewriteLog
e RewriteLogLevel
così puoi vedere cosa viene abbinato e come viene realmente riscritto. Immagino che vengano copiati solo 255 caratteri $1
, e questo finisce per essere un id
aspetto che il client non è autorizzato a vedere, quindi Apache restituisce il 403. Non ho guardato il codice, ma potrebbe essere che Apache manipoli il backreference in un buffer a 256 byte fisso (il 256 ° è riservato al NULL di terminazione).