web-dev-qa-db-ja.com

Apacheで特定のパラメータを持つURLのみを許可するにはどうすればよいですか?

Piwikを使用してWebサイトの訪問者を追跡しています。 「セキュリティ」の問題として、私はindex.phpのいくつかの既知のIPへのアクセスのみを許可します。私の問題は、Piwikオプトアウトスニペットがこのindex.phpを介してのみ利用可能であるということです。

RewriteRuleおよびLocation/Filesディレクティブを使用してこれを解決しようとしましたが、特定のURLパラメーターのみを許可し、他のユーザーに拒否させることはできません。

Piwikを(あまり)知らないがApacheを知らないすべての人にとって、ここでの基本的なポイントは次のとおりです。

  • 管理GUIは、アクセスが既知のIPに制限されているindex.phpを介して利用できます。
  • Piwikオプトアウトスニペットはのみ既知のパラメーターセットを使用してindex.php経由で利用できます:index.php?module=CoreAdminHome&action=optOut&lang=DE

私が欲しいのは:

  • 既知のIP以外のすべての不明なIPからのindex.phpへのアクセスを拒否します。 (完了)
  • すべてのIPからindex.phpに設定されたオプトアウトパラメータへのアクセスを許可します。 (保留中)

Apacheで特定のパラメータを持つURLのみを許可するにはどうすればよいですか?

私は試した:

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>
3
burnersk

ルールを次のように縮小できると思います。

RewriteEngine on
RewriteCond %{REMOTE_ADDR} !127\.0\.0\.1
RewriteCond %{QUERY_STRING} !action=optOut
RewriteRule index.php - [R=401]
2