首页 文章

当RewriteRule与RewriteMap键不匹配时,如何将原始请求URL作为默认值?

提问于
浏览
0

我正在使用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 回答

  • 0

    我刚刚找到了解决问题的方法 . 有必要定义一个RewriteCond来检查RewriteMap文件中是否有正确的密钥 . 如果它不在 Map 文件中,则RewriteRule将为scipt,并且将使用原始请求URL .

    RewriteCond看起来像 RewriteCond ${MapName:$1|NOT_FOUND} !NOT_FOUND .

相关问题