web-dev-qa-db-ja.com

apacheの特定のドメイン名を書き換え/制限する

https://example1.com/loginexample2.com/loginが同じApacheサーバー(2.2.22)からホストされています。 /loginexample1.comに制限したい。

  • example1.com/login-> 404(できれば)または403

  • example2.com/login->ログインページ

私は試した

<Location /login>
Order Deny,Allow
Deny from example1.com
Allow from example2.com
</Location>

/loginexample1.comの両方からexample2.comを無効にします。 example1.comだけを制限できますか?

3
akay

これは、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_をリクエストした場合は何もしません(リクエストは単に許可されます)。

RewriteCondCondPatternの_=_プレフィックスは、正規表現ではなく正確な辞書式比較になるため、ドットをエスケープしたり(アンカー

代わりに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エラードキュメント。ただし、最初の例(RewriteRulepatternを使用)は、これが最初に処理されるため、より効率的です。

0
MrWhite