Используйте apache, чтобы удалить URL-параметр и добавить его в качестве настраиваемого заголовка HTTP при перенаправлении.

Допустим, мой браузер выдает запрос http://localhost/accounts?memberUuid=<some uuid>

мне бы хотелось apache2 чтобы получить этот запрос, добавьте пользовательский заголовок HTTP с uuid в нем раздеть uuid параметр из URL и перенаправить на http://localhost:9000/accounts с новым настраиваемым заголовком.

Я полный Apache Noob. Я использовал его только как простой веб-сервер для обслуживания файлов html, css и javascript. Так что я даже не знаю, с чего начать, иначе я бы опубликовал некоторые вещи, которые я до сих пор пробовал.

Это возможно только с apache2? Нужны ли дополнительные инструменты для этого? Спасибо!

редактировать

Это создает впечатление, что я должен иметь возможность добавлять любые заголовки к запросу. Или я неправильно это понимаю? Как бы я использовал это вместе с входящим значением в URL, чтобы отправить нужный мне заголовок?

3 ответа

Решение

Это оказалось возможным путем объединения RewriteRule с Proxy

<VirtualHost *:80>
  RewriteEngine On
  RewriteCond %{QUERY_STRING} ^(.*)memberUuid=(.*)$
  RewriteRule ^/(.*)$ http://127.0.0.1:9000/$1 [E=memberUuid:%2,P]
  ProxyPreserveHost On
  ProxyPass /excluded !
  ProxyPass / http://127.0.0.1:9000/
  ProxyPassReverse / http://127.0.0.1:9000/

  Header add iv-user "%{memberUuid}e"
  RequestHeader set iv-user "%{memberUuid}e"
</VirtualHost>

Это невозможно, как описано. Природа HTTP без сохранения состояния означает, что вы не можете связать текущий ответ с будущим запросом, если не используете такой механизм, как файлы cookie.

Чтобы ответить на ваш отредактированный вопрос о mod_headers, вы, вероятно, недоразумение. Модуль позволяет добавлять дополнительные заголовки запроса на стороне сервера. Вы не можете принудительно отправлять клиентам определенные заголовки, если у вас нет правила связи по HTTP-протоколу с ч / б клиентами и сервером.

Возможно, вы захотите пойти с Cookie. ты можешь использовать Set-Cookie заголовок. Я не уверен на 100%, можете ли вы использовать cookie-файлы на сайтах, работающих на разных портах, но я подумал, что они могут работать, если имя домена совпадает. О куки даже википедия объясняет очень хорошо.

http://en.wikipedia.org/wiki/HTTP_cookie

РЕДАКТИРОВАТЬ: Я лично часто использую php, поэтому вот очень простой пример для установки Cookie и перенаправления в PHP:

// set cookie value
setcookie('uuid', $_GET['memberUuid'], time() + 3600);
// redirect
header('Location: http://localhost:9000/accounts');
exit;

и вы можете получить значение cookie по $_COOKIE['uuid'] на локальном хосте:9000

РЕДАКТИРОВАТЬ 2:

Если вы настраиваете только на apache, mod_headers не сможет выполнить эту работу, поскольку он не обрабатывает переменные GET, насколько я знаю. Вместо этого mod_rewrite может работать.

RewriteEngine On
RewriteRule ^/accounts\?memberUuid=(.*) http://localhost:9000/accounts [R,CO=uuid:$1:localhost:1440:/]

Я не проверял это, но я знаю, что mod_rewrite способен извлекать значения из вашего URL, устанавливать файлы cookie и перенаправлять.

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