这是我的问题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 /规则,因为很多空间可能会出现。 我尝试了一系列不同的条件和规则,似乎并没有做它应该做的事情。
我仍然乐于回答,因为我觉得这可以做得更好,更可靠,和/或更强大。