Tentando redirecionar um URL para outra página por faixa de IP

2

Estou tendo um problema aqui. Eu tenho várias regras de reescrita que eu acho que não funciona.

Meu principal objetivo é restringir as páginas e permitir somente um bloqueio específico de IP ou de rede.

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
RewriteRule ^/solutions https://example.com/account/signin?go=outside [R,NE,NC]

Eu testei isso de novo e parece não funcionar? Eu fiz algo errado?

    
por Louie Miranda 25.08.2010 / 02:47

5 respostas

3

Tente isto:

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]

Note que várias diretivas RewriteCond são implicitamente AND'd, você precisa especificar se elas devem ser OR'd. Se você quiser que o navegador se lembre do redirecionamento, especificar um redirecionamento permanente pode economizar algum processamento futuro.

Dependendo da sua configuração, pode ser mais fácil especificar os intervalos de Bom Conhecido e redirecionar para todos os outros. A partir do manual de reescrita sobre como redirecionar estrangeiros: Manual do Apache

RewriteEngine on
RewriteCond   %{REMOTE_HOST}  !^.+\.ourdomain\.com$
RewriteRule   ^/solutions      https://example.com/account/signin?go=outside [NE,NC,R=301]
    
por 25.08.2010 / 04:09
1

Parece que você está criando uma cortina (uma parede de sinalização, uma parede de pagamento ou uma cortina de manutenção, etc.) que todos os intervalos de IP na Internet podem chegar.

Isso é o que eu fiz para criar essa configuração:

# 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

E isso parece bastante semelhante ao seu. Eu sugiro que você simplifique e teste com apenas um IP primeiro. Se o resto, se sua configuração for bastante complexa, pode estar atrapalhando, então tente provar isso em um contexto menor, ou mova-o anteriormente na configuração. Os virtuais estão ficando no caminho? você precisa replicar a configuração (use um Include se você precisar fazer isso).

Eu diria, porém, que eu tenho (eu acho) coisas conhecidas como REMOTE_ADDR para não ser definido no caso em que algum outro módulo não está ativado .... tem sido um tempo desde que eu achei esse comportamento ... é cgi_module ativado?

    
por 24.06.2016 / 15:04
0

Prix, estou realmente seguindo isso.

link

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 
    
por 25.08.2010 / 04:10
0

Este 2 deve ser definido em VirtualHost ou Directory para trabalhar:

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

Você pode tentar o que quiser assim:

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$

que se traduziria para:

  • se o ip começar com 192.168.10.
  • ou ip começa com 72.139.201.
  • ou ip começa com 129.233.4.
  • ou ip é 208.118.97.32
por 25.08.2010 / 05:12
0

Talvez eu esteja entendendo errado o que você está querendo fazer, mas se eu entendi o que você está tentando fazer, parece que você está fazendo de uma maneira incrivelmente complexa.

Se for para o site inteiro ou para um diretório inteiro, por que não apenas usar a diretiva allow em um diretório da sub-rotina virtualhost, conforme apropriado?

link

E defina a página de erro 403 como desculpa.html link

Então, algo como:

<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> 
    
por 25.08.2010 / 19:18