reescrever / restringir nome de domínio específico no apache

3

Temos https://example1.com/login e example2.com/login hospedados no mesmo servidor apache (2.2.22). Desejo restringir /login em example1.com .

  • example1.com/login - > 404 (de preferência) ou 403

  • example2.com/login - > página de login

Eu tentei

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

Desativa /login de example1.com e example2.com . Posso restringir apenas example1.com ?

    
por akay 29.11.2016 / 16:45

1 resposta

0

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 both example1.com and example2.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.

    
por 29.11.2016 / 17:17