Постоянные перенаправления htaccess выдает внутреннюю ошибку сервера

В документации mod_rewrite для Apache 2.2 RewriteRule [R] Государства флага:

Любой действительный код состояния ответа HTTP может быть указан с использованием синтаксиса [R=305], причем код состояния 302 используется по умолчанию, если ни один не указан. Указанный код состояния не обязательно должен быть кодом состояния перенаправления (3xx). Однако, если код состояния находится вне диапазона перенаправления (300–399), тогда строка подстановки полностью удаляется, и перезапись прекращается, как если бы использовался символ L.

Помимо кодов статуса ответа вы также можете указать статус перенаправления, используя их символические имена: temp (дефолт), permanent, или же seeother,

Однако следующий фрагмент кода, по-видимому, допускает только "символические имена":

# Force HTTPS
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off

# this works
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=permanent,NE]

# this doesn't work
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=308,NE]

Журнал ошибок показывает:

[Вторник, 23 мая 23:11:12 2017] [alert] [client 192.168.33.1] /var/www/html/ventus/.htaccess: RewriteRule: недопустимый код ответа HTTP "308" для флага "R"

Тем не менее, 308 представляется кодом статуса HTTP для постоянного перенаправления: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/308

Это ошибка в Apache или я делаю что-то не так?

1 ответ

Решение

Вы не можете использовать 308 с вашей версией apache (2.2). Поддержка статуса 308 была добавлена ​​в apache 2.4.3: https://archive.apache.org/dist/httpd/CHANGES_2.4.3

core: добавить отсутствующие коды состояния HTTP, зарегистрированные в IANA.

Да, это ошибка. Ваша интерпретация документации верна, и все коды в диапазоне 300–399 должны быть приняты.

Другие вопросы по тегам