RewriteCond用于.htaccess文件

时间:2017-07-27 11:50:02

标签: .htaccess mod-rewrite query-string

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

公共网址类似于此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

2 个答案:

答案 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]

这似乎对我有用。但有没有办法进一步缩短这种状况?我相信我并没有在这里充分利用正则表达式。