Что делает этот HTTP-авторизация RewriteRule?

У меня есть ошибка рекурсии перезаписи где-то на моем веб-сайте, который вызвал Google Bot, но я не могу найти URL-адрес, вызвавший его, потому что мой Loglevel низкий. Я поднял его, но пока этого не произошло.

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

Все Rewriterules отлично смотрятся на меня и имеют флаг [L], кроме этого.

Я не могу это понять. Это из системы магазинов с открытым исходным кодом Magento.

Насколько я могу судить, он ничего не делает, кроме как устанавливает переменную среды E. Но разве это не очень глупый способ сделать это? Не следует ли использовать SetEnv, если это было целью?

Ответы

Ответ 1

Эта строка устанавливает переменную окружения в значение строки аутентификации пользователя - по существу, для установки переменной, а не постоянного значения. Насколько мне известно, SetEnv и SetEnvIf позволяют вам устанавливать переменную окружения с заданной константой.

Установленная переменная фактически является HTTP_AUTHORIZATION, а не E. Я предполагаю, что это часть процесса аутентификации пользователя.

Ответ 2

Группа разработчиков Symfony имеет для этого хороший ответ. Я цитирую:

похоже, что ваш хостинг работает php как fcgi, а не php5_module, как ваш localhost. (phpinfo - Сервер API: CGI/FastCGI)

Дело в том, что php5_module автоматически обрабатывает заголовки HTTP_AUTHORIZATION, но fcgi_module не делает.

решение прост - добавьте эту строку в свои .htacces на своем сервере хостинга:

RewriteRule. * - [E = HTTP_AUTHORIZATION:% {HTTP: авторизация}, L]

Это сработало для меня