使用apache剥离一个URL参数,并将其添加为redirect的自定义HTTP头

假设我的浏览器向http://localhost/accounts?memberUuid=<some uuid>发出请求

我希望apache2提取这个请求,添加一个自定义的HTTP头,其中的uuid ,从urluuid参数,并redirecthttp://localhost:9000/accounts与新的自定义标题。

我是一个总的apache noob。 我只用它作为一个简单的networking服务器来提供html,css和javascript文件。 所以我甚至不知道从哪里开始,否则我会发布一些我迄今尝试过的东西。

单独使用apache2可能吗? 我是否需要运行一些额外的工具来完成这个工作? 谢谢!

编辑

这使得它看起来应该能够添加我想要的任何标题。 还是我误解了这个? 我将如何使用此URL以及URL上的传入值来发送我需要的标题?

这是不可能的,如上所述 。 HTTP的无状态意味着你不能将当前的响应与未来的请求联系起来,除非你使用了一种机制,例如cookies。

要回答你关于mod_headers的编辑问题,你可能会误解。 该模块允许您在服务器端添加额外的请求标头。 除非通过HTTP协议B / W客户端和服务器有通信规则,否则不能强制客户端自由发送特定标头。

你可能想要去用Cookie。 你可以使用Set-Cookie头。 我不能100%确定是否可以在运行在不同端口上的站点上使用cookie,但是我认为只要域名是一样的,就可以工作。 关于cookie,甚至维基百科解释得非常好。

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

编辑:我个人使用PHP很多,所以这里是一个非常简单的例子来设置Cookie和redirect在PHP中:

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

您可以通过localhost:9000上的$_COOKIE['uuid']来检索cookie值

编辑2:

如果你只在apache上configuration,mod_headers将无法完成这项工作,因为据我所知它不处理GETvariables。 相反,mod_rewrite可能工作。

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

我没有testing这个,但我知道mod_rewrite是能够检索您的url值,设置Cookie和redirect。

通过把RewriteRuleProxy结合起来,这是可能的

 <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>