我尝试对一个国家/地区的所有IP进行重写。
所以我想出了以下.htaccess文件:
AddDefaultCharset utf-8
Action php /cgi-php53/php
AddHandler php53 .php
RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^(2)\.(22)\.(60)\.(\d+)$ [OR]
RewriteCond %{REMOTE_ADDR} ^(5)\.(1)\.((9[6-9]|100|10[1-2]|103))\.(\d+)$ [OR]
[etc...]
RewriteCond %{REMOTE_ADDR} ^(84)\.((72|7[3-4]|75))\.(\d+)\.(\d+)$ [OR]
[etc...]
RewriteCond %{REMOTE_ADDR} ^(217)\.(197)\.((216|21[7-8]|219))\.(\d+)$ [OR]
RewriteCond %{REMOTE_ADDR} ^(217)\.(197)\.((220|221))\.(\d+)$
RewriteRule (.*) http://host.ch/$1 [R=301,L]
RewriteCond %{HTTP_HOST} !host\.de
RewriteCond %{REQUEST_URI} ^.*/$
RewriteRule (.*) http://host.de/$1 [R=301,L]
RewriteCond %{HTTP_HOST} !host\.de
RewriteCond %{REQUEST_URI} !^.*/$
RewriteRule (.*) %{REQUEST_URI}/ [R=301,L]
因此,对于我的IP,行RewriteCond %{REMOTE_ADDR} ^(84)\.((72|7[3-4]|75))\.(\d+)\.(\d+)$ [OR]
匹配。 regexp在多个在线和离线RegExp测试人员中进行了测试。但是apache拒绝重定向我。
有任何解释吗?
(顺便说一句:我知道RegExes看起来有点奇怪,因为(72 | 7 [3-4] | 75)可能是(7 [2-5]),因为它们是从CIDR表转换而来的一个python脚本,但它们是有效的,这对我来说已经足够了。)