RewriteCond 用于 .htaccess 文件中的查询参数

RewriteCond for query parameters in .htaccess files

我必须写一些重写规则,我需要根据我的查询参数进行检查。

publicurl是这样的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

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

将您的规则更改为:

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

好吧,我认为需要对根本不存在的 optparam 进行额外检查。试过这个:

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

这似乎对我有用。但是有什么办法可以进一步缩短这个条件呢?我相信我没有在这里充分发挥正则表达式的潜力。