Максимальная длина 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.
Я вижу два варианта:
- Измените формат URL вашего приложения, используя не более 255 символов между каждым слешем.
- Переместите правила перезаписи в конфигурацию виртуального хоста apache и удалите REQUEST_FILENAME.