如何在Apache HTTP服务器中基于请求URL进行过滤



我想在我的应用程序和客户端之间有一个apache http服务器。

查询参数必须在客户端访问时传递。例如,如果我的客户端运行在http://myhost:myport/myapp中,那么只能通过传递参数myparam来访问它。像http://myhost: myport/myapp ? myparam = 123。

所以在我的apache http服务器中,我想过滤不包含查询参数myparam的请求。

我试过使用过滤器。它有一些预定义的过滤器,但没有一个过滤器满足我的要求。我尝试使用mod_ext_filter。但似乎整个内容被传递到我的程序,而不是URL。由于我需要根据URL中存在的参数进行过滤,因此我认为它不满足我的要求。

是否有任何http服务器模块,可以用来过滤基于参数被传递在URL?

编辑

此外,我还需要从查询参数中获取值并验证它。验证是一个REST服务调用

在2.4中你可以做一些简单的事情:

<Location /myapp>
  Require expr %{QUERY_STRING} =~ /myparam/
</location>

你可以使用和捕获,但我不知道如何让它查找上下文根的"映射"来查询参数。

如果你有很多myapp->myparam对,你可能想去旧学校mod_rewrite并将它们存储在基于文本的rewritemap中。下面是一个例子,它有一些"有趣的"重写技巧来完成你所描述的:

RewriteMap foo txt:/tmp/rewrite.map
RewriteEngine ON
# Fancy way to check two variables are equal in a RewriteCond
RewriteCond %{QUERY_STRING},${foo:$1} !^([^,]+),1
# grab the first segment
RewriteRule ^/([^/]+)/ - [F]

但是(如果在后面的评论中讨论),你需要从某种远程web服务中检索映射,你需要在httpd中实现一个C或Lua模块。困难的部分变成了检索远程响应,其他部分很简单:

您可以编写自己的access_checker模块来查找r->uri和R ->参数设置很容易。但是您需要自己的http客户端来制作传出REST调用——核心中没有用于此的API。——女巫大聚会Aug 24 at 13:27

相关内容

  • 没有找到相关文章

最新更新