Как разрешить только URL с определенным параметром в Apache?

Я использую Piwik для отслеживания посетителей моих сайтов. В целях "безопасности" я разрешаю доступ только к index.php несколько известных IP-адресов. Моя проблема в том, что фрагмент отказа Piwik доступен только через этот index.php,

Я пытался решить это с помощью RewriteRuleи Location/Files директивы, но я не смогу разрешить только конкретный параметр URL, а другие запретят.

Для всех тех людей, которые не знают (много) Piwik, но Apache здесь основные моменты:

  • Административный графический интерфейс доступен через index.php доступ к которому ограничен известными IP-адресами.
  • Фрагмент отказа от Piwik доступен только через index.php с известным набором параметров: index.php?module=CoreAdminHome&action=optOut&lang=DE

Что я хочу это:

  • Запретить доступ к index.php со всех неизвестных IP-адресов, но известных IP-адресов. (сделанный)
  • Разрешить доступ к параметру opt-out для index.php со всех IP-адресов. (Заявлен)

Как разрешить только URL с определенным параметром в Apache?

Я старался:

Order allow,deny
Allow from all
<Files "index.php">
    Order allow,deny
    Deny from all
    Allow from 127.0.0.1
</Files>
RewriteEngine On
RewriteRule ^/piwik-opt-out.html$ index.php?module=CoreAdminHome&action=optOut [L]
<Location "/piwik-opt-out.html">
    Order allow,deny
    Allow from all
</Location>

1 ответ

Решение

Я думаю, что вы можете сократить правила просто:

RewriteEngine on
RewriteCond %{REMOTE_ADDR} !127\.0\.0\.1
RewriteCond %{QUERY_STRING} !action=optOut
RewriteRule index.php - [R=401]
Другие вопросы по тегам