Używam mod_rewrite do przepisywania adresów URL w następujący sposób:
http://example.com/1,2,3,4/foo/
Robiąc to w .htaccess:
RewriteEngine On
RewriteRule ^([\d,]+)/foo/$ /foo.php?id=$1 [L,QSA]
Działa dobrze, z wyjątkiem sytuacji, gdy „1,2,3,4” zamienia się w ciąg dłuższy niż 255 znaków, Apache zwraca „403 Forbidden”.
Nie ma problemu z foo.php?id=1,2,3,4
bezpośrednim odwiedzeniem , nawet przy bardzo długim ciągu id, jednak nie jest to dla mnie opcja.
Czy jest jakieś ustawienie Apache lub innego ustawienia, które powinienem dostosować?
AKTUALIZACJA : Włączyłem RewriteLog za pomocą RewriteLogLevel 9. Z krótkim ciągiem id otrzymuję kilka wierszy w moim pliku dziennika. Ale gdy ciąg id jest większy niż 255 znaków., Nic nie jest rejestrowane (wydaje się, że mod_rewrite nawet nie wykonuje?).
Jeśli uznasz to pytanie za interesujące / pomocne, oceń je.
RewriteLog
i RewriteLogLevel
tak można zobaczyć, co jest dopasowane i jak to naprawdę jest przepisany. Domyślam się, że kopiowane są tylko 255 znaków $1
, co kończy się tym, id
że klient nie jest upoważniony do ich przeglądania, więc Apache zwraca 403. Nie spojrzałem na kod, ale możliwe, że Apache manipuluje odwołanie wsteczne w stałym 256-bajtowym buforze (256-ty jest zarezerwowany dla kończącej wartości NULL).