Dot-Htaccess

具有多個查詢字元串的 mod_rewrite

  • March 9, 2016

這是我的問題的擴展https://serverfault.com/a/761474/77231

我正在嘗試向QUERY STRINGURL 添加一個附加參數並將空格更改為下劃線,但沒有成功。

而不是簡單地改變:

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 \sand%2520代替\和空格…以及所有帶有管道分隔符的\ |\s|%20|%2520.

理想情況下,我希望在一次重寫中完成這項工作,但我很樂意讓它工作。任何幫助表示讚賞。

我能夠通過添加以下條件和規則來得到這個。

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

不幸的是,我需要重複這個條件/規則,因為可能會出現很多空格。我嘗試了一堆不同的條件和規則[N]似乎從來沒有做它應該做的事情。

我仍然願意接受答案,因為我覺得這可以做得更好、更可靠和/或更強大。

引用自:https://serverfault.com/questions/762198