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

Моя схема 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 может быть любой длины. Как преодолеть этот предел?

1 ответ

Решение

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

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

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

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

  1. Измените формат URL вашего приложения, используя не более 255 символов между каждым слешем.
  2. Переместите правила перезаписи в конфигурацию виртуального хоста apache и удалите REQUEST_FILENAME.
Другие вопросы по тегам