![使用 apache 剥离 URL 参数并将其添加为重定向上的自定义 HTTP 标头](https://linux22.com/image/591727/%E4%BD%BF%E7%94%A8%20apache%20%E5%89%A5%E7%A6%BB%20URL%20%E5%8F%82%E6%95%B0%E5%B9%B6%E5%B0%86%E5%85%B6%E6%B7%BB%E5%8A%A0%E4%B8%BA%E9%87%8D%E5%AE%9A%E5%90%91%E4%B8%8A%E7%9A%84%E8%87%AA%E5%AE%9A%E4%B9%89%20HTTP%20%E6%A0%87%E5%A4%B4.png)
假设我的浏览器发出一个请求http://localhost/accounts?memberUuid=<some uuid>
我想apache2
接收该请求,添加其中包含的自定义 HTTP 标头,从 URL 中uuid
删除参数,然后使用新的自定义标头重定向到。uuid
http://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 和重定向。