web-dev-qa-db-ja.com

IP範囲でURLを別のページにリダイレクトしようとしています

ここで少し問題があります。私には、機能しないと思うこのいくつかの書き換えルールがあります。

私の主な目的は、ページを制限し、特定のIPまたはネットワークブロックのみを許可することです。

RewriteEngine On
RewriteLog "/data/wre/var/logs/modrewrite.log"
RewriteLogLevel 5

RewriteCond %{REMOTE_ADDR} !^192\.168\.10\..*
RewriteCond %{REMOTE_ADDR} !^72\.139\.201\..*
RewriteCond %{REMOTE_ADDR} !^129\.233\.4\..*
RewriteCond %{REMOTE_ADDR} !^208\.118\.97\32
RewriteRule ^/solutions https://example.com/account/signin?go=outside [R,NE,NC]

これをもう一度テストしましたが、機能しないようですか?私は何か間違ったことをしましたか?

2
Louie Miranda

これを試して:

RewriteEngine On
RewriteLog "/data/wre/var/logs/modrewrite.log"
RewriteLogLevel 5

RewriteCond %{REMOTE_ADDR} ^192\.168\.10\..* [OR]
RewriteCond %{REMOTE_ADDR} ^72\.139\.201\..* [OR]
RewriteCond %{REMOTE_ADDR} ^129\.233\.4\..*  [OR]
RewriteCond %{REMOTE_ADDR} ^208\.118\.97\.32
RewriteRule ^/solutions https://example.com/account/signin?go=outside [NE,NC,R=301]

複数のRewriteCondディレクティブは暗黙的にANDされることに注意してください。代わりに、それらをORする必要があるかどうかを指定する必要があります。ブラウザにリダイレクトを記憶させたい場合は、永続的なリダイレクトを指定すると、将来の処理を節約できる可能性があります。

構成によっては、既知の良好な範囲を指定して、他のすべてのユーザーにリダイレクトする方が簡単な場合があります。外国人のリダイレクトに関する書き直しマニュアルから: Apache Manual

RewriteEngine on
RewriteCond   %{REMOTE_Host}  !^.+\.ourdomain\.com$
RewriteRule   ^/solutions      https://example.com/account/signin?go=outside [NE,NC,R=301]
3
Grizly

インターネット内のいくつかのIP範囲を除いて、すべてが到達できるカーテン(サインインウォール、ペイウォール、またはメンテナンスカーテンなど)を作成しているようです。

これは、そのような構成を作成するために私が行ったことです。

# This implements a maintenance curtain; only these three IPs
# can look behind the curtain. Note its useful to allow the box
# itself too.
#
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !127.0.0.1
RewriteCond %{REMOTE_ADDR} !123.234.45.6
RewriteCond %{REMOTE_ADDR} !123.234.45.78
RewriteCond %{REQUEST_URI} !^/maintenance-curtain/.*
RewriteRule / / [L,R=503]

ErrorDocument 503 /maintenance-curtain/index.html
ProxyPass /maintenance-curtain !
Alias /maintenance-curtain /var/www/maintenance-curtain

そして、それはあなたのものと非常に似ています。最初に1つのIPだけで単純化してテストすることをお勧めします。残りの構成がかなり複雑な場合は、邪魔になる可能性があるため、これをより小さなコンテキストで証明するか、構成の早い段階で移動してみてください。仮想ホストが邪魔になっていますか。構成を複製する必要がありますか(必要な場合はIncludeを使用してください)。

ただし、他のモジュールが有効になっていない場合にREMOTE_ADDRのような設定が行われないことがわかっていると思いますが、その動作を確認してからしばらく経ちました... cgi_moduleは有効になっていますか?

1
Cameron Kerr

Prix​​、私は実際にこれをフォローしています。

http://www.the-art-of-web.com/system/rewrite/

Conversely, you may want to allow only certain IP addresses to access the site:

RewriteCond %{REMOTE_ADDR} !^12\.34\.56\.78$
RewriteCond %{REMOTE_ADDR} !^87\.65\.43\.21$
RewriteCond %{REQUEST_URI} !^sorry\.html  
RewriteRule .* /sorry.html 
Translation:

IF their IP address is not 12.34.56.78 
AND their IP address is not 87.65.43.21 
AND the request is not for sorry.html 
THEN display the sorry.html page 
0
Louie Miranda

この2は、VirtualHostまたはDirectoryのいずれかに設定して解決する必要があります。

RewriteLog "/data/wre/var/logs/modrewrite.log"
RewriteLogLevel 5

あなたはこのようにあなたが望むものを試すことができます:

RewriteCond %{REMOTE_ADDR} ^192\.168\.10\. [OR]
RewriteCond %{REMOTE_ADDR} ^72\.139\.201\. [OR]
RewriteCond %{REMOTE_ADDR} ^129\.233\.4\.  [OR]
RewriteCond %{REMOTE_ADDR} ^208\.118\.97\.32$

これは次のように解釈されます:

  • ipが192.168.10で始まる場合。
  • またはipは72.139.201で始まります。
  • またはipは129.233.4で始まります。
  • またはIPは208.118.97.32です
0
Prix

あなたが何をしたいのか誤解しているかもしれませんが、あなたが何をしようとしているのか理解できれば、あなたは信じられないほど複雑な方法でやっているように見えます。

サイト全体またはディレクトリ全体を対象としている場合は、必要に応じて、virtualhostスタンザのディレクトリでallowディレクティブを使用しないのはなぜですか?

http://httpd.Apache.org/docs/2.2/mod/mod_authz_Host.html#allow

そして、403エラーページをsorry.htmlに設定します http://httpd.Apache.org/docs/2.2/mod/core.html#errordocument

だから次のようなもの:

<directory "/path/to/content/" >

Order Allow,Deny
Allow 192.168.0.0/255.255.0.0  # allow everyone from the 192.168.0.0/255.255.0.0 network
# every one else gets denied (default for stuff that has not matched is to the 
# last clause of the Order directive
# the error document for a 403 (forbidden) is the sorry.html page
ErrorDocument 403  /sorry.html

</directory> 
0
Jason Tan