正则表达式如何在 htaccess 中工作以重定向 IP 范围

正则表达式如何在 htaccess 中工作以重定向 IP 范围

我一直在尝试将 IP 范围从一个链接重定向到另一个链接。我可以对单个 256 个地址块执行此操作:

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

但是,尝试阻止 8192 个地址范围(xxx.xxx.128.0 - xxx.xxx.159.255)需要正则表达式才能正确表达重定向。尽管我找到了一些示例,但我无法理解必须放在括号中的值。有人可以解释如何正确使用这些表达式吗?

我自己的尝试看起来是这样的:

RewriteCond %{REMOTE_HOST} ^xxx\.xxx\.1([2-5][8-9])

答案1

不,那只会匹配

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

你想要的(如果正则表达式是正确的工具;我不确定是否有更好的方法来匹配这里的网络掩码)将是

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

括号内的部分匹配任何一个 2随后是89或者 345后跟任意数字。

在第二种情况下,您需要“任何数字”,因为否则正则表达式会匹配xxx.xxx.13.57不在您的范围内的内容。

相关内容