RewriteCond查询参数在.htaccess文件中

问题描述:

我必须编写一些重写规则,我需要根据查询参数进行检查。RewriteCond查询参数在.htaccess文件中

公开的网址是这样的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 

但是,即使我发送参数值为真,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 

您的规则改成这样:

RewriteCond %{QUERY_STRING} ^(optparam=false)?$ [NC] 
RewriteRule ^lmn/xyz\.json$ xyz.json [L,NC] 
+0

如果根本没有'optparam'会怎么样? – Anusha

+0

'?!false $'当值是真的时,它不会触发规则吗?它应该只是'?false $',另外,我怎样才能将它与无参数结合呢? – Anusha

+0

添加了示例,请检查我的编辑 – Anusha

嗯,我想在所有需要的optparam不存在额外的检查。试过这个:

RewriteCond %{QUERY_STRING} (^$|!^optparam$|^optparam=false$) [NC] 
RewriteRule ^lmn/xyz\.json$ xyz.json [L,NC] 

这似乎适用于我。但是有什么办法可以进一步缩短这种情况吗?我相信我没有在这里使用正则表达式来充分发挥它的潜力。