特定の URL をネットワーク外部から特定の IP アドレスのみにアクセスできるように制限しようとしています。外部のユーザーが IP リストからではなくその URL にアクセスしようとすると、ホームページにリダイレクトされる必要があります。
これは私がこれまで試してきたことですが、うまくいきませんでした。最後の部分では、IP に関係なく、全員をホームページにリダイレクトします。
<Location "/secret">
# <If "%{REMOTE_ADDR} != -ipmatch '123.123.123.123/255.255.255.255'">
# Redirect 303 "/secret" /
# </If>
RewriteCond "%{REMOTE_ADDR}" "!123\.123\.123\.123"
RewriteRule .* / [R,L]
LogLevel debug rewrite:trace6
</Location>
PS: /secret URL は実際には仮想 URL であり、ドライブ上に物理的に存在しません。
答え1
Require [ip|host|env]
仮想ホストまたは場所にアクセスできるユーザーを指定するために使用します。
<Directory "/docroot">
Require ip 10.10.11.12
</Directory>
リダイレクトに関しては、カスタムエラーページこれは、すべての不正アクセスが 403 エラーを引き起こすため、簡単に評価できるため、より一般的です。
私は Apache ではこれをやったことはありませんが、この戦略を nginx で使います。Apache の場合は、次のようにすればよいでしょう:
ErrorDocument 403 http://homepage.example.com
カスタム エラー ドキュメントは、ErrorDocument ディレクティブを使用して構成されます。これは、グローバル、仮想ホスト、またはディレクトリ コンテキストで使用できます。AllowOverride が FileInfo に設定されている場合は、.htaccess ファイルで使用できます。(Apache ドキュメントより)
答え2
Order、Deny、AllowオプションはApache 2.4で次のように置き換えられました。
<Directory /var/www/mysite.com/htdocs/public>
Require all granted
</Directory>
以下の方法を使用して、アドレスを明示的に制限できます。
<Directory /var/www/mysite.com/htdocs/public>
Require all granted
Require not ip 192.168.0.1
</Directory>
正反対の場合も同様で、すべてを制限してサブセットのみを許可するには、次のようにします。
<Directory /var/www/mysite.com/htdocs/public>
Require host example.com
Require ip 192.168.0.1
</Directory>
詳細は以下をご覧ください。Apache 2.4 アクセス制御のドキュメント。
あなたの質問に関して (コメントを追加するポイントが不足していたため、私自身の質問を編集しました)、インデックスを URL パスとして設定した ErrorDocument を設定するだけで済むはずです。
<Directory /var/www/mysite.com/htdocs/public>
Require host example.com
Require ip 192.168.0.1
ErrorDocument 401 /index.html
</Directory>
お役に立てれば!
答え3
Apache 2.4 の場合、<RequireAny> を使用できます。これは、vhost または .htaccess ファイルで実行できます。
SetEnvIF IP xxx.xxx.xxx.xxx AllowThisIP # Or X-Real-IP
SetEnvIF IP yyy.yyy.yyy.yyy AllowThisIP
<RequireAny>
Require env AllowThisIP
Require host example.com
</RequireAny>
Apache ドキュメント詳細は、httpd.apache.org/docs/2.4/mod/mod_authz_core.html を参照してください。