我正在使用rewrite_mod来重写Web服务请求 . 如果请求的QUERY_STRING包含某个参数,则URL会获得一些其他参数 . 这是我的重写条件 . 我还使用了一个定义键值对的RewriteMap . 当RewriteCond匹配时,密钥的值将被添加到重写的URL .
一切正常但现在我想在RewriteRule中找不到RewriteMap文件中的密钥时,在RewriteRule的替换中添加一个默认值 . RewriteRule中的语法类似于 ${ MapName : LookupKey | DefaultValue }
. 如果找不到查找键,则将使用DefaultValue .
我真正想要的是,当找不到密钥时,将使用原始请求URL并且不进行替换 .
我的第一种方法是使用 ${MapName:$1|http://%{HTTP_HOST}%{REQUEST_URI}?{QUERY_STRING}}
或 ${MapName:$1|http://%{HTTP_HOST}%{REQUEST_URI}}
但它们都不起作用 . 在 |
之后我不知道要把什么作为DefaultValue .
1 回答
我刚刚找到了解决问题的方法 . 有必要定义一个RewriteCond来检查RewriteMap文件中是否有正确的密钥 . 如果它不在 Map 文件中,则RewriteRule将为scipt,并且将使用原始请求URL .
RewriteCond看起来像
RewriteCond ${MapName:$1|NOT_FOUND} !NOT_FOUND
.