максимальная длина URL 257 символов для mod_rewrite?

11

Моя схема 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 Forbidden и 404. Тем не менее, если длина строки 'var1-var2 ...' составляет 257 символов или менее и после нее следует косая черта, длина оставшегося URL может быть любой длины. Как преодолеть этот предел?

Даниил
источник

Ответы:

11

Вы столкнулись с ограничением базовой файловой системы.

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

С Apache, если вы поместите такие правила в файл .htaccess, будет слишком поздно, чтобы обойти проблему. Apache уже попытался определить длинное имя файла, выдав ошибку файловой системы «(36) Имя файла слишком длинное», возвращающую ошибку 403.

Я вижу два варианта:

  1. Измените формат URL вашего приложения, используя не более 255 символов между слешами.
  2. Переместите правила перезаписи в конфигурацию виртуального хоста apache и удалите REQUEST_FILENAME.
h0tw1r3
источник
Если файл .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 14.10.13