Apache mod_rewrite问题

时间:2009-10-27 09:13:27

标签: mod-rewrite cookies redirect post-parameter

我有一个在tomcat 6下运行的应用程序。在它前面我有 一个apache服务器,它转发所有请求。也就是说,用户“会谈” 到了apache而不是tomcat。由于某些原因,它是要求的 以下:当apache服务器收到表单

的请求时
http://www.mydomain.com/myApp

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

其中$ PREFIX是POST参数。此$ PREFIX参数也可用 作为COOKIE和额外标题。 我没有找到使用mod_rewrite读取post参数/ cookies / headers的方法。

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

提前致谢。

路易斯

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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

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

更多示例here

答案 2 :(得分:0)

如上所述,您无法使用mod_rewrite读取POST body 。但是,您可以读取Cookie标头(使用HTTP_COOKIE服务器变量)和任何其他自定义HTTP请求标头。

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

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

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

$1后向引用仅省去了从请求的URL路径重复 substitution 中的myApp字符串的麻烦。

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

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

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