I've been trying to redirect an IP range from one link to another. I can do it for a single 256 address block:
RewriteEngine On
RewriteBase /
RewriteCond %{REMOTE_HOST} ^111\.111\.111\.
RewriteCond %{REQUEST_URI} /original_link/$
RewriteRule .* /new_link/ [R=301,L]
However, trying to block a 8192 address range (xxx.xxx.128.0 - xxx.xxx.159.255) requires regular expressions to express the redirect properly. Even though I found some examples, I couldn't make much sense of the values that have to be put in brackets. Can somebody please explain how to use those expressions properly?
My own attempt would look something like this:
RewriteCond %{REMOTE_HOST} ^xxx\.xxx\.1([2-5][8-9])
Answer
No, that would only match
xxx.xxx.128
xxx.xxx.129
xxx.xxx.138
xxx.xxx.139
xxx.xxx.148
xxx.xxx.149
xxx.xxx.158
xxx.xxx.159
What you want (if regexes is even the right tool; I'm not sure if there is a better way to match on netmasks that works here) would be
^xxx\.xxx\.1(2[89]|[3-5][0-9])
The parenthesised part matches either 2
followed by 8
or 9
, or 3
, 4
, or 5
followed by any digit.
You need the "any digit" in the second case, because otherwise the regex would match, for example, xxx.xxx.13.57
which is not in your range.
No comments:
Post a Comment