Apache 2.2 - "允许来自"仅当QUERY_STRING匹配时

时间:2014-03-18 13:03:17

标签: apache

我试图将我的一台服务器限制为只有一个特定的请求,但经过2个小时的尝试后,我们无法找到可行的解决方案。基本上我正在寻找类似于<If ...>指令的东西,但我只有Apache 2.2(这是事实,我不能更新到2.4)。

我有4台服务器:前端[1-3]和后端1。前端[1-2]允许在backend1上执行任何操作,但frontend3应该只允许发出1个特定请求。在Apache 2.4中,它看起来像这样:

<Location />
    Order allow,deny

    Allow from frontend1
    Allow from frontend2

    <If "%{QUERY_STRING} =~ /foobar/myfunc/[^/]*$">
        Allow from frontend3
    </If>
</Location>

我怎样才能在Apache 2.2中做同样的事情?我尝试使用SetEnvIf,但由于它没有逻辑和它是一团糟而且没有工作(我必须匹配主机 URL,因为frontend3只允许做&#34; myfunc&#34;)。

1 个答案:

答案 0 :(得分:0)

在mod_rewrite的帮助下找到了一种方法:

RewriteEngine On

# Matching the host "frontend3"
RewriteCond %{REMOTE_ADDR} ^1\.2\.3\.4$
# Matching the request "/foobar/myfunc?do=something"
RewriteCond %{QUERY_STRING} ^do=something$
# Setting an environment variable if host & request match
RewriteRule ^/foobar/myfunc$ - [E=allowthis:1,L]

<Location />
    Order allow,deny

    Allow from frontend1
    Allow from frontend2

    Allow from env=allowthis
</Location>