【问题标题】:How to read POST parameters, cookies or HTTP headers using Apache mod_rewrite如何使用 Apache mod_rewrite 读取 POST 参数、cookie 或 HTTP 标头
【发布时间】:2009-10-27 09:13:27
【问题描述】:

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

http://www.example.com/myApp

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

$PREFIX 是一个 POST 参数。这个$PREFIX参数也可用 作为一个 COOKIE 和一个额外的标题。

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

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

【问题讨论】:

    标签: mod-rewrite cookies redirect post-parameter


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回答。是否可以使用 cookie 或额外的标头参数来做到这一点?您的建议是不可能的,因为它不仅必须在应用程序中完成,而且还必须在每个使用过的插件等处完成。实际上这是我的第一种方法,但由于这会产生大量工作,我已经放弃了它。我必须找到更高级别的解决方案。
    【解决方案2】:

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

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

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

    更多例子here

    【讨论】:

    • 感谢您的回答。我正在尝试类似的东西。为您 +1 :-)
    【解决方案3】:

    如前所述,您无法使用 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 路径的 替换 中重复 myApp 字符串的麻烦。

    如果你想在重写之前首先检查 HTTP 请求头是否设置,那么你可以使用附加条件:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多