我有一个在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模块/连接器吗?
提前致谢。
路易斯
答案 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(我们可以这样做,但是只是保存重复)。