1

我有一个在 Tomcat 6 下运行的应用程序。在它前面我有一个 Apache 服务器,它正在转发所有请求。也就是说,用户与 Apache 而不是 Tomcat “交谈”。由于某种原因,Apache 服务器收到了对 URL 的请求:

http://www.example.com/myApp

然后它必须被转发到http://www.example.com/$PREFIX/myApp

$PREFIXPOST 参数在哪里。此$PREFIX参数也可用作 COOKIE 和额外的标头。

我找不到使用 mod_rewrite 读取 POST 参数/cookies/headers 的方法。

这可能吗?如果没有,我应该使用另一个 Apache 模块/连接器吗?

4

3 回答 3

2

您不能将 POST 数据用于 mod_rewrite。这是因为 POST 数据不在 http 请求的 HEADER 中,而是在 BODY 中。

我的建议是您在发布页面上执行一个操作,将前缀添加到 URL,这意味着您甚至不需要重写。

于 2009-10-27T09:30:42.887 回答
1

尝试类似的东西(我的正则表达式有点古怪,所以可能需要一些修补):

RewriteCond %{HTTP_COOKIE} yourcookie=(.*)
RewriteRule ^/myApp(.*)$ /%1/$1 [R,L]

%1 将反向引用 RewriteCond 模式中的组。

更多示例在这里

于 2009-10-27T12:10:51.397 回答
0

如前所述,您无法使用 mod_rewrite读取 POST正文。但是,您可以读取Cookie标头(使用HTTP_COOKIEserver 变量)和任何其他自定义 HTTP 请求标头。

如果您需要的信息在自定义标头中可用,那么阅读它可能更容易/更安全,因为它HTTP_COOKIE包含从客户端发送的所有 cookie 名称/值对,因此您必须特别注意提取所需信息。

如果所需信息始终包含在X-PrefixHTTP 请求标头中,那么您可以使用单个 mod_rewrite 指令在内部重写请求:

RewriteRule ^/?(myApp)$ /%{HTTP:X-Prefix}/$1 [L]

反向引用只是省去了从请求的 URL 路径$1中重复替换myApp字符串的麻烦。

如果要在重写之前首先检查 HTTP 请求标头是否已设置,则可以使用附加条件:

RewriteCond %{HTTP:X-Prefix} (.+)
RewriteRule ^/?(myApp)$ /%1/$1 [L]

X-Prefix在第二个规则块中,仅当设置了标头并具有值时才重写请求。这是使用%1反向引用捕获的,而不是直接在替换字符串中引用自定义 HTTP(我们可以这样做,但只是节省了重复)。

于 2019-11-03T01:20:47.423 回答