限制使用查询参数

时间:2016-09-02 09:24:16

标签: regex apache security configuration

我需要只为某些已定义的用户访问URL。在URL中有一个查询参数,它是鉴别器。

网址可能是这样的:

https://my.my.com/my-app/view/myView.xhtml?myQueryParam=allUsers

我在这种apache配置中的经验是〜0并且谷歌搜索了一点我可以设置这个:

RewriteEngine on
RewriteCond %{QUERY_STRING} myQueryParam=allUsers
RewriteRule "/my-app/view/myView[.]xhtml.*" - [E=no_auth_required:1]

<LocationMatch "/my-app/view/myView[.]xhtml.*">

               Require uniqueID user1ID user2ID

</LocationMatch>

xhtml?之间也会出现其他字符串,因此.*

这有效,但问题是它也拒绝访问ex。到链接

https://my.my.com/my-app/view/myView.xhtml?myQueryParam=somethingElse

它似乎并没有打扰查询参数的值...

我想念什么?

编辑:我忘了说我使用的是Apache 2.2。

2 个答案:

答案 0 :(得分:3)

提供的解决方案适用于Apache v2.4

通过If指令中的Location*指令检查env变量值:

RewriteCond %{QUERY_STRING} myQueryParam=allUsers
RewriteRule . - [E=no_auth_required:1]

<Location "/my-app/view/myView.xhtml">
    <If "reqenv('no_auth_required') == 1">
        Require uniqueID user1ID user2ID
    </If>
</Location>

答案 1 :(得分:0)

试试这个,基本上告诉apache匹配xhtml后不是问号的任何东西。

RewriteEngine on
RewriteCond %{QUERY_STRING} myQueryParam=allUsers
RewriteRule "/my-app/view/myView[.]xhtml[^?]*" - [E=no_auth_required:1]

<LocationMatch "/my-app/view/myView[.]xhtml[^?]*">

               Require uniqueID user1ID user2ID

</LocationMatch>