Como funcionam as expressões regulares no htaccess para redirecionar um intervalo de IPs

0

Estou tentando redirecionar um intervalo de IP de um link para outro. Eu posso fazer isso por um único bloco de 256 endereços:

RewriteEngine On
RewriteBase /
RewriteCond %{REMOTE_HOST} ^111\.111\.111\.
RewriteCond %{REQUEST_URI} /original_link/$
RewriteRule .* /new_link/ [R=301,L]

No entanto, tentar bloquear um intervalo de endereços 8192 (xxx.xxx.128.0 - xxx.xxx.159.255) requer expressões regulares para expressar o redirecionamento corretamente. Embora eu tenha encontrado alguns exemplos, não consegui entender os valores que devem ser colocados entre colchetes. Alguém pode explicar como usar essas expressões corretamente?

Minha tentativa seria semelhante a esta:

RewriteCond %{REMOTE_HOST} ^xxx\.xxx\.1([2-5][8-9])
    
por Zerobinary99 24.12.2014 / 01:57

1 resposta

1

Não, isso corresponderia apenas

xxx.xxx.128
xxx.xxx.129
xxx.xxx.138
xxx.xxx.139
xxx.xxx.148
xxx.xxx.149
xxx.xxx.158
xxx.xxx.159

O que você quer (se regexes é mesmo a ferramenta certa; não tenho certeza se existe uma maneira melhor de combinar em netmasks que funcionem aqui) seria

^xxx\.xxx\.1(2[89]|[3-5][0-9])

A parte dos parênteses corresponde a ou 2 seguido por 8 ou 9 , ou 3 , 4 ou 5 seguidos por qualquer dígito.

Você precisa do "qualquer dígito" no segundo caso, porque, caso contrário, o regex corresponderia, por exemplo, xxx.xxx.13.57 , que não está no seu intervalo.

    
por 24.12.2014 / 02:10