Я пытаюсь получить значение параметра запроса «авторизация» и сохранить его в заголовке «Авторизация» запроса.
Первое правило перезаписи работает нормально. Во втором правиле перезаписи значение $ 2, похоже, не сохраняется в переменной environement. Как следствие, заголовок запроса «Авторизация» пуст.
Любая идея ? Спасибо.
<VirtualHost *:8010>
RewriteLog "/var/apache2/logs/rewrite.log"
RewriteLogLevel 9
RewriteEngine On
RewriteRule ^/(.*)&authorization=@(.*)@(.*) http://<ip>:<port>/$1&authorization=@$2@$3 [L,P]
RewriteRule ^/(.*)&authorization=@(.*)@(.*) - [E=AUTHORIZATION:$2,NE]
RequestHeader add "Authorization" "%{AUTHORIZATION}e"
</VirtualHost>
Мне нужно обработать несколько случаев, потому что иногда параметры находятся в пути, а иногда - в запросе. В зависимости от пользователя. Последний случай терпит неудачу. Значение заголовка для АВТОРИЗАЦИИ выглядит пустым.
# if the query string includes the authorization parameter
RewriteCond %{QUERY_STRING} ^(.*)authorization=@(.*)@(.*)$
# keep the value of the parameter in the AUTHORIZATION variable and redirect
RewriteRule ^/(.*) http://<ip>:<port>/ [E=AUTHORIZATION:%2,NE,L,P]
# add the value of AUTHORIZATION in the header
RequestHeader add "Authorization" "%{AUTHORIZATION}e"
Похоже, у вас есть флаг "L" (последний) на первом правиле. На этом обработка правил остановится и больше не будет перезаписи. Я не думаю, что второе правило когда-либо будет выполнено. Попробуйте снять флажок "L".
редактировать
О, и у вас тоже установлен флаг «P» (прокси). Это также остановит обработку правила перезаписи в этот момент и вызовет запрос прокси через mod_proxy.
Можете ли вы сделать все в одном правиле, так как совпадение с образцом одинаковое. Я не совсем уверен, что вам нужно, но это мощь сделай это:
RewriteRule ^/(.*)&authorization=@(.*)@(.*) http://<ip>:<port>/$1&authorization=@$2@$3 [E=AUTHORIZATION:$2,NE,L,P]
Обновить
Ага, мне кажется, я понимаю, что вы сейчас пытаетесь сделать. Как только вы укажете [P] во флагах, в этот момент произойдет запрос прокси. Если я правильно прочитал вопрос, вы хотите, чтобы в этот запрос была передана переменная AUTHORIZATION, поэтому вам нужно будет ввести ее перед [P]:
# if the query string includes the authorization parameter
RewriteCond %{QUERY_STRING} ^(.*)authorization=@(.*)@(.*)$
RewriteRule ^/(.*) - [E=AUTHORIZATION:%2]
# add the value of AUTHORIZATION in the header
RequestHeader add "Authorization" "%{AUTHORIZATION}e"
# keep the value of the parameter in the AUTHORIZATION variable and redirect
RewriteRule ^/(.*) http://<ip>:<port>/ [NE,L,P]
Полностью непроверенный, но должен делать то, что вы хотите - если я правильно понимаю вопрос.
Обновление конфигурации Apache
У вас установлен AllowOverride FileInfo для этого каталога в httpd.conf? Если нет, то вы не сможете использовать RequestHeader в .htaccess.
Есть ли причина, по которой вы используете mod_rewrite
для этого, а не mod_setenvif
?
http://httpd.apache.org/docs/current/mod/mod_setenvif.html#setenvif
Я подозреваю, что вы тоже не можете отменить Authorization
заголовок или что он был искажен позже в процессе запроса. Как я уверен, вы знаете, Authorization:
используется для Базовая аутентификация HTTP так что есть хороший шанс, что что-то еще поправляет его. Можете ли вы использовать заголовок с другим именем?