Что делает эта HTTP-авторизация RewriteRule? - PullRequest
15 голосов
/ 09 февраля 2011

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

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

Все Rewriterules выглядят хорошо для меня и имеют флаг [L], кроме этого.

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

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

Ответы [ 2 ]

18 голосов
/ 07 ноября 2012

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

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

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

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

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

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

7 голосов
/ 09 февраля 2011

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

На самом деле устанавливаемая переменная - HTTP_AUTHORIZATION, а не E..

...