Ограничить доступ к URL-адресу с параметрами запроса

Мне нужно, чтобы URL-адрес был доступен только для определенных пользователей. В 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

Кажется, что это не беспокоит значение параметра запроса...

Что мне не хватает?

EDIT: Я забыл сказать, что я использую Apache 2.2.

Ответ 1

Предоставленное решение для Apache v2.4

Проверить значение переменной env директивой If в директиве Location*:

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>

Ответ 2

попробуйте это, в основном говоря, что 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>