https://example1.com/login
とexample2.com/login
が同じApacheサーバー(2.2.22)からホストされています。 /login
をexample1.com
に制限したい。
example1.com/login
-> 404(できれば)または403
example2.com/login
->ログインページ
私は試した
<Location /login>
Order Deny,Allow
Deny from example1.com
Allow from example2.com
</Location>
/login
とexample1.com
の両方からexample2.com
を無効にします。 example1.com
だけを制限できますか?
これは、mod_rewriteを使用して行うことができます。これにより、サイトにアクセスしているHostを確認できます。サーバー構成(または_<Directory>
_セクションまたは_.htaccess
_ファイル)で以下を試してください。
_RewriteEngine On
RewriteCond %{HTTP_Host} =example1.com [NC]
RewriteRule ^/?login$ - [R=404,L]
_
上記は、_example1.com/login
_をリクエストした場合は404 Not Foundを提供しますが、_example2.com/login
_をリクエストした場合は何もしません(リクエストは単に許可されます)。
RewriteCond
CondPatternの_=
_プレフィックスは、正規表現ではなく正確な辞書式比較になるため、ドットをエスケープしたり(アンカー。
代わりに403Forbiddenを提供するために、次のようにRewriteRule
のフラグを変更できます。
_RewriteRule ^/?login$ - [F]
_
_<Location /login> Order Deny,Allow Deny from example1.com Allow from example2.com </Location>
__
/login
_と_example1.com
_の両方から_example2.com
_を無効にします。
私はかなり興味があります...これは一見allowすべてのアクセスを許可しますが、拒否しませんか? _Deny from ...
_ディレクティブは、_example1.com
_ホストにアクセスしているユーザーではなく、_example1.com
_からのユーザーへのアクセスを(リモートIPアドレスでの逆DNSルックアップを介して)拒否します。 Deny
ディレクティブとAllow
ディレクティブのどちらも一致しないため、デフォルトAllowになります。 (?)
...同じRewriteCondに複数の書き換え条件を追加するにはどうすればよいですか?
PDATE:RewriteCond
ディレクティブ(つまり、conditions)は、後続の単一のRewriteRule
ディレクティブに適用されることに注意してください。上記の例を続けて、_/login
_に対してのみ複数のURL(たとえば、_/demo
_、_/test
_、_example1.com
_)をブロックする場合は、これらすべてをRewriteRule
で組み合わせることができます。 pattern。例えば:
_RewriteCond %{HTTP_Host} =example1.com [NC]
RewriteRule ^/?(login|demo|test)$ - [R=404,L]
_
この場合、URLは制限されており、すべて非常に短いため、これで問題ありません。または、URLごとに条件を作成し、OR
フラグを使用することもできます。例えば:
_RewriteCond %{HTTP_Host} =example1.com [NC]
RewriteCond %{REQUEST_URI} ^/login$ [OR]
RewriteCond %{REQUEST_URI} ^/demo$ [OR]
RewriteCond %{REQUEST_URI} ^/test$
RewriteRule ^ - [R=404,L]
_
これは..._HTTP_Host
_が_example1.com
_およびであるすべてのURLについて、URLは_/login
_または_/demo
_または_/test
_次に404エラードキュメント。ただし、最初の例(RewriteRule
patternを使用)は、これが最初に処理されるため、より効率的です。