带有多个QUERY STRINGS的mod_rewrite

这是我的问题https://serverfault.com/a/761474/77231的扩展

我正在尝试向URL添加一个额外的QUERY STRING参数,并将空格更改为下划线,但没有成功。

而不是简单地改变:

 http://somedomainname.com/grafana/dashboard/db/generic-ping?var-device=SF-some.machinename.com 

至:

 http://somedomainname.com/grafana/dashboard/db/generic-ping?var-device=SF-some_machinename_com 

我试图改变一个额外的参数,如:

 http://somedomainname.com/grafana/dashboard/db/generic-check?var-device=SF-some.machinename.com&var-check=Check CPU Load 

至:

 http://somedomainname.com/grafana/dashboard/db/generic-check?var-device=SF-some_machinename_com&var-check=Check_CPU_Load 

在我以前回答的问题中使用相同的逻辑,我能够得到第一部分工作使用:

 RewriteCond %{QUERY_STRING} (.*)\.(.*)\.(.*) RewriteRule ^/grafana/dashboard/db/generic-check /grafana/dashboard/db/generic-check?%1_%2_%3 [R=301] 

但是,这显然只是让我的第一部分,并出现如下:

 http://somedomainname.com/grafana/dashboard/db/generic-check?var-device=SF-some_computername_com&var-check=Check%2520CPU%2520Load 

我已经添加了一个额外的QUERY_STRING和重写规则,如:

 RewriteCond %{QUERY_STRING} ^&var-check=(.*)\ (.*)\ (.*) RewriteRule ^&var-check var-check=%1_%2_%3 [R=301] 

…没有成功。

我也试过把两者结合起来:

 RewriteCond %{QUERY_STRING} (.*)\.(.*)\.(.*)&(.*)\ (.*)\ (.*) RewriteRule ^/grafana/dashboard/db/generic-check /grafana/dashboard/db/generic-check?%1_%2_%3&%4_%5_%6 [R=301] 

..也没有成功,以及使用%20 \s%2520而不是\和一个空格…以及像\ |\s|%20|%2520这样的pipe道分隔符。

理想情况下,我希望在一次重写中完成这项工作,但是我很乐意让它工作。 任何帮助表示赞赏。

我能够通过添加以下条件和规则来获得这个。

 RewriteCond %{QUERY_STRING} ^(.*)(%2520)(.*)(%2520)(.*)$ RewriteRule ^(.+)$ $1?%1_%3_%5 [R=301] 

不幸的是,我需要重复这个cond /规则,因为很多空间可能会出现。 我尝试了一系列不同的条件和规则,似乎并没有做它应该做的事情。

我仍然乐于回答,因为我觉得这可以做得更好,更可靠,和/或更强大。