Максимальна довжина URL-адреси 257 символів для mod_rewrite?


12

Моя URL-адреса /foo/var1-var2-var3.../bar

Я використовую ці mod_rewrite правила:

RewriteBase /foo/
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^ index.php [PT,L]

Якщо довжина рядка 'var1-var2 ...' перевищує 257 символів, то повертається помилка 403 Заборонено і 404. Однак, якщо довжина рядка 'var1-var2 ...' дорівнює 257 символів або менше, а згодом слідує коса риса, довжина решти URL може бути будь-якої довжини. Як можна подолати цю межу?

Відповіді:


12

Ви стикаєтесь з обмеженням базової файлової системи.

Погляньте на Обмеження файлової системи . Ви побачите, що більшість має максимальну довжину імені файлу - 255 байт. Таким чином, коли apache та / або ваше правило перезапису перевіряє, чи існує файл, помилка повертається в apache операційною системою.

Якщо в Apache розмістити такі правила як у файлі .htaccess, вирішити проблему вже пізно. Apache вже спробував встановити довге ім'я файлу, тим самим викинувши помилку файлової системи "(36) Ім'я файлу занадто довго", повертаючи помилку 403.

Я бачу два варіанти:

  1. Змініть формат URL-адреси вашої програми на максимум 255 символів між кожною косою рисою.
  2. Перемістіть правила перезапису у конфігурацію віртуального хоста apache та видаліть REQUEST_FILENAME.

Якщо файл .htaccess не містить {REQUEST_FILENAME}, але все-таки повертає 403, чи все ж це може бути проблемою? ( serverfault.com/questions/140852/… )
philfreo

1
Ви повинні перемістити правила перезапису в конфігурацію apache . Це єдиний спосіб зберегти функціональність і вирішити проблему.
h0tw1r3

3
Під час переміщення правил з .htaccess в конфігурацію віртуального хоста apache вам потрібно змінити %{REQUEST_FILENAME}=> %{DOCUMENT_ROOT}%{REQUEST_FILENAME}і також додати косу рису на початок шаблонів URL-адрес, наприклад, RewriteRule ^abc ...але не RewriteRule ^/abc .... Ви повинні полюбити прямоту mod_rewrite ...
ash108

2
"Перемістіть правила перезапису в конфігурацію віртуального хоста apache" частина золота: вона насправді працює при правильній реалізації, на відміну від багатьох інших обхідних способів, які я намагався.
ash108
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.