Apache mod_rewrite正确的正则表达式不匹配

时间:2013-01-22 14:49:27

标签: regex apache mod-rewrite

我尝试对一个国家/地区的所有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脚本,但它们是有效的,这对我来说已经足够了。)

0 个答案:

没有答案