Я використовую mod_rewrite, щоб переписати такі URL-адреси:
http://example.com/1,2,3,4/foo/
Роблячи це в .htaccess:
RewriteEngine On
RewriteRule ^([\d,]+)/foo/$ /foo.php?id=$1 [L,QSA]
Це працює чудово, за винятком випадків, коли "1,2,3,4" перетворюється на рядок довжиною більше 255 символів, Apache повертає "403 Заборонено".
Немає проблем із відвідуванням foo.php?id=1,2,3,4
безпосередньо, навіть із дуже довгим рядком id, однак для мене це не варіант.
Чи є якась настройка Apache чи інша установка, яку я повинен налаштувати?
ОНОВЛЕННЯ : Увімкнув RewriteLog за допомогою RewriteLogLevel 9. За допомогою короткого рядка id я отримую кілька рядків у своєму журналі журналу. Але коли рядок id перевищує 255 символів, нічого не реєструється (здається, ніби mod_rewrite навіть не виконується?).
Якщо ви вважаєте це питання цікавим / корисним, будь ласка, підкажіть його.
RewriteLog
і RewriteLogLevel
ви зможете побачити, що відповідає і як насправді переписується. Я б здогадався, що копіюється лише 255 символів $1
, і це закінчується тим, id
що клієнт не має права бачити, тому Apache повертає 403. Я не переглянув код, але може бути, що Apache маніпулює зворотній зв'язок у фіксованому 256-байтовому буфері (256-й зарезервовано для завершення NULL).