Назад | Перейти на главную страницу

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

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

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

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

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

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