36

現在、次を使用して、IP 12.345.678.90 を除くすべてのユーザーをリダイレクトしています。

RewriteEngine On
RewriteCond %{REQUEST_URI} !/maintenance$
RewriteCond %{REMOTE_HOST} !^12\.345\.678\.90
RewriteRule $ /maintenance [R=302,L]

範囲を許可するには、どの構文を使用しますか? 私の許可リストには次のものがあります。

Allow from 123.45.678.90/28

REMOTE_HOST 行を次のように更新するだけで機能しますか?

RewriteCond %{REMOTE_HOST} !^12\.345\.678\.90/28
4

5 に答える 5

34

Apache HTTPD 2.4 以降を使用している場合は、を使用して REMOTE_ADDR を CIDR マスクと一致させることができます。

短い形式は次のようになります。

RewriteCond expr "-R '192.168.1.0/24'"

次の長い形式も利用できますが、ドキュメントでは効率が悪いことが示唆されています。

RewriteCond expr "%{REMOTE_ADDR} -ipmatch '192.168.1.0/24'"

これにより、例の完全なソリューションは次のようになります。

RewriteEngine On
RewriteCond %{REQUEST_URI} !/maintenance$
RewriteCond expr "! -R '12.345.678.90/28'"
RewriteRule $ /maintenance [R=302,L]
于 2016-03-15T23:32:03.627 に答える
31

%{REMOTE_ADDR}おそらくを照合したいでしょうが、%{REMOTE_ADDR}文字通りリモート アドレスであるため、CIDR 表記を使用することはできず、正規表現を使用して照合を試みることができます。したがって、123.45.67.89/28 (123.45.67.80 - 123.45.67.95) の場合、次のようにする必要があります。

RewriteCond %{REMOTE_ADDR} !^123\.45\.67\.8[0-9]$
RewriteCond %{REMOTE_ADDR} !^123\.45\.67\.9[0-5]$
于 2012-07-25T16:53:52.087 に答える
1

これを .htaccess で試してください。それは働いています。

RewriteCond %{REMOTE_ADDR} !^123\.456\.789\.[0-255]
于 2019-09-18T05:17:45.967 に答える