Você pode fazer isso usando o mod_rewrite, que permite que você verifique o host através do qual o site está sendo acessado. Tente o seguinte, na configuração do seu servidor (ou <Directory>
section ou .htaccess
file):
RewriteEngine On
RewriteCond %{HTTP_HOST} =example1.com [NC]
RewriteRule ^/?login$ - [R=404,L]
O item acima exibe um 404 Not Found se você solicitar example1.com/login
, mas não fará nada se solicitar example2.com/login
(a solicitação simplesmente será permitida).
O prefixo =
no RewriteCond
CondPattern faz dele uma comparação lexicográfica exata, não uma regex, então não é necessário escapar do ponto nem usar âncoras .
Para servir um Forbidden 403, você pode alterar os sinalizadores no RewriteRule
, por exemplo:
RewriteRule ^/?login$ - [F]
<Location /login> Order Deny,Allow Deny from example1.com Allow from example2.com </Location>
It disables
/login
from bothexample1.com
andexample2.com
.
Estou bastante curioso ... isso, aparentemente, permite acesso a todos, não negá-lo? A diretiva Deny from ...
nega acesso ao usuário de example1.com
(por meio de pesquisa inversa de DNS no endereço IP remoto), não o usuário que está acessando o example1.com
host. Nem as diretivas Deny
ou Allow
devem corresponder, por isso, deve ser Permitir . (?)
...how do i add multiple rewrite conditions for the same RewriteCond?
UPDATE: Observe que RewriteCond
diretivas (ou seja, condições ) se aplicam à diretiva RewriteRule
a seguir. Continuando com o exemplo acima, se você quiser bloquear vários URLS (por exemplo, /login
, /demo
e /test
) para example1.com
, então você pode combinar todos eles no padrão RewriteRule
. Por exemplo:
RewriteCond %{HTTP_HOST} =example1.com [NC]
RewriteRule ^/?(login|demo|test)$ - [R=404,L]
Está tudo bem neste caso, pois os URLs são limitados e todos muito curtos. Como alternativa, você pode criar uma condição para cada URL e usar o sinalizador OR
. Por exemplo:
RewriteCond %{HTTP_HOST} =example1.com [NC]
RewriteCond %{REQUEST_URI} ^/login$ [OR]
RewriteCond %{REQUEST_URI} ^/demo$ [OR]
RewriteCond %{REQUEST_URI} ^/test$
RewriteRule ^ - [R=404,L]
Isso indica ... que todos os URLs em que o HTTP_HOST
é example1.com
e o URL é /login
ou /demo
ou /test
, em seguida, veicula o documento de erro 404. No entanto, o primeiro exemplo (usando o padrão RewriteRule
) seria mais eficiente, pois é o que é processado primeiro.