如何使用Apache mod_rewrite rewritecond与POST参数?

6

我知道可以在rewritecond中检查GET查询字符串参数,如下所示:

RewriteCond %{REQUEST_URI} ^/somepath/somepath
RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{QUERY_STRING} try=3
RewriteCond %{QUERY_STRING} name=([^&]*)
RewriteRule ^/somepath/somepath(.*) /otherpath/otherpath?name=%1 [R]

我该如何检查请求体中的POST参数?我听说mod_security可以做到,但我没有找到任何关于如何使用mod_security和上面示例类似的mod_rewrite的示例。

我打算使用类似下面这样的方式处理POST:

RewriteCond %{REQUEST_URI} ^/somepath/somepath
RewriteCond %{REQUEST_METHOD} POST
RewriteRule ^/somepath/somepath(.*) /otherpath/otherpath [PT]

除了我需要一个RewriteCond来检查POST参数中是否包含"try=3"。

modsecurity能否检查请求主体并将检查结果加载到环境变量中?那样可以起作用...


1
你应该没有解决这个问题,对吧?我现在也遇到了一个非常类似的情况。 - Dustin Simpson
没有使用Apache HTTP服务器的解决方案。在我的情况下,Apache是一个反向代理到后端Weblogic服务器。最终我编写了一个Java Servlet托管在Weblogic中来处理POST的重定向。 - Jaffadog
谢谢。最终我也需要做类似的事情。我构建了一个小的node.js应用作为我的反向代理。虽然不是我想要的那么干净,但它能够工作。 - Dustin Simpson
1个回答

5

使用mod_rewrite无法检查请求主体。

如果可以的话,您可能需要将POST请求重定向到脚本进行重写。如果您重定向浏览器,它们并不总是会重新发送POST数据。


谢谢Jon。我已经更新了我的问题,展示了我打算如何处理POST请求 - 使用PT而不是R。 - Jaffadog

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接