这是我的问题的扩展https://serverfault.com/a/761474/77231
我正在尝试QUERY STRING
向 URL 添加附加参数并将空格更改为下划线,但没有成功。
而不是简单地改变:
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
。
理想情况下,我希望一次重写就能完成,但只要它能正常工作,我就很高兴了。任何帮助我都会感激不尽。
答案1
通过添加以下条件和规则,我可以实现这一点。
RewriteCond %{QUERY_STRING} ^(.*)(%2520)(.*)(%2520)(.*)$
RewriteRule ^(.+)$ $1?%1_%3_%5 [R=301]
不幸的是,无论出现多少个空格,我都需要重复此条件/规则。我尝试了许多不同的条件和规则,但[N]
似乎都没有达到预期的效果。
我仍然愿意接受答案,因为我觉得这可以做得更好、更可靠和/或更强大。