使用 apache 剥离 URL 参数并将其添加为重定向上的自定义 HTTP 标头

使用 apache 剥离 URL 参数并将其添加为重定向上的自定义 HTTP 标头

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

我想apache2接收该请求,添加其中包含的自定义 HTTP 标头,从 URL 中uuid删除参数,然后使用新的自定义标头重定向到。uuidhttp://localhost:9000/accounts

我对 Apache 完全一窍不通。我只用它作为一个简单的 Web 服务器来提供 html、css 和 javascript 文件。所以我甚至不知道从哪里开始,否则我会发布一些我迄今为止尝试过的东西。

仅使用 apache2 可以实现这一点吗?我需要运行一些其他工具来实现这一点吗?谢谢!

编辑

看起来我应该能够向请求添加任何我想要的标头。还是我误解了这一点?我该如何使用它以及 URL 上的传入值来发送我需要的标头?

答案1

事实证明,这是可能的,通过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>

答案2

这是不可能的如所述HTTP 的无状态特性意味着您无法将当前响应与未来的请求关联起来,除非您使用诸如 cookie 之类的机制。

答案3

回答您编辑的关于 的问题mod_headers,您可能误解了。该模块允许您在服务器端添加其他请求标头。除非您在客户端和服务器之间有通过 HTTP 协议进行通信的规则,否则您不能强制客户端自由发送特定标头。

您可能想要使用 Cookie。您可以使用Set-Cookie标头。我不确定您是否可以在运行不同端口的网站上使用 cookie,但我认为只要域名相同,它就可以工作。关于 cookie,甚至维基百科也解释得很好。

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

编辑:我个人经常使用 php,因此这里有一个在 PHP 中设置 Cookie 和重定向的非常简单的示例:

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

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

编辑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 中检索值、设置 Cookies 和重定向。

相关内容