我必须编写一些重写规则,我需要根据查询参数进行检查。
公共网址类似于此abc.com/lmn/xyz.json
,并且有一个可选参数optparam
。
这就是我想要实现的目标:
如果optparam
存在且not equal to false
,则条件必须失败并继续执行其他规则。
通过阅读几篇博客和帖子后,我对这些规则有一个非常微弱的想法。所以尝试了这个:
RewriteCond %{QUERY_STRING} !^optparam $ [NC,OR]
RewriteCond %{QUERY_STRING} ^optparam=false$ [NC]
RewriteRule ^lmn/xyz.json$ xyz.json
但即使我发送param值为true,也会应用RewriteRule。
请告诉我这里缺少什么。
提前致谢!
示例:
abc.com/lmn/xyz.json ==> Rule should fire
abc.com/lmn/xyz.json?optparam ==> Rule should not fire
abc.com/lmn/xyz.json?optparam=false ==> Rule should fire
abc.com/lmn/xyz.json?optPARAM=hfjsgzjrg ==> Rule should not fire
abc.com/lmn/xyz.json?optParam=FALSE ==> Rule should fire
答案 0 :(得分:1)
将您的规则更改为:
RewriteCond %{QUERY_STRING} ^(optparam=false)?$ [NC]
RewriteRule ^lmn/xyz\.json$ xyz.json [L,NC]
答案 1 :(得分:0)
好吧,我认为需要额外检查optparam
根本不存在。试过这个:
RewriteCond %{QUERY_STRING} (^$|!^optparam$|^optparam=false$) [NC]
RewriteRule ^lmn/xyz\.json$ xyz.json [L,NC]
这似乎对我有用。但有没有办法进一步缩短这种状况?我相信我并没有在这里充分利用正则表达式。