Apache 修改重写长度

Apache 修改重写长度,apache,mod-rewrite,Apache,Mod Rewrite,我在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不匹配

我在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

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

它不匹配,因为它执行的是您要求它执行的操作,而不是您期望它执行的操作。地图查找按预期工作,有效地:

RewriteCond / >""
但是,cond match string运算符意味着“按字母数字排序顺序进行比较”和“>”可能会有问题。为什么不使用regexp呢。如果包含(至少)一个字符,则匹配:

RewriteCond ${mapfile:$1?%{QUERY_STRING}} .