0

我在 VirtualHost 中有这样的配置:

RewriteEngine On
RewriteMap mapfile txt:mapfile.txt
RewriteCond ${mapfile:$1?%{QUERY_STRING}} >""
RewriteRule ^/(.+)$ ${mapfile:$1?%{QUERY_STRING}}? [R=301]

这适用于这个 mapfile.txt

prueba/code.asp?id=489 /newurl

但与此 mapfile.txt 不匹配:

prueba/code.asp?id=489 /

在重写日志中:

[07/Dec/2012:20:52:08 +0100] [rid#7f1ac2d4280/initial] (5) map lookup OK: map=mapfile[txt] key=prueba/code.asp?id=489 -> val=/

[07/Dec/2012:20:52:08 +0100] [rid#7f1ac2d4280/initial] (4) RewriteCond: input='/' pattern='>""' => not-matched

为什么不匹配?是否有另一种方法来测试查询长度是否大于“”

4

1 回答 1

0

它不匹配,因为它正在做你要求它做的事情,而不是你期望它做的事情。地图查找按您预期的方式工作,从而有效地:

RewriteCond / >""

但是,cond 匹配字符串运算符意味着“按字母数字排序顺序比较”和 >“”可能会出现问题。为什么不使用正则表达式。如果它包含(至少)一个字符,它将匹配:

RewriteCond ${mapfile:$1?%{QUERY_STRING}} .
于 2012-12-08T02:15:30.083 回答