mod_rewrite用path后面的下划线replace所有的点

我已经在这里和所有标记的问题,但我的问题是不同的,因为要么replace“ . ”与“ _ ”是在一个特定的path后,我正在通过proxypass运行。

我正在尝试改变:

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

码:

选项+ FollowSymLinks

RewriteEngine On

ProxyPreserveHost打开

ProxyPass / grafana http://100.65.7.97:3000

ProxyPassReverse / grafana http://100.65.7.97:3000

我已经尝试了很多东西,几个小时后,浏览serverfault / stackoverflow / webmasters.stackexchange /谷歌等。但我没有尝试成功redirect。 我不知道为什么。

我试过的一些东西(以及它们的变体):

 RewriteRule ^([^\.]*)\ (.*)$ $1_$2 [E=%E2:yes,N] RewriteCond %{ENV:%E2} yes RewriteRule (.*) http://%{HTTP_HOST}$1 [R=301,L] 

 RewriteRule ^(/?grafana/dashboard/db/.*/[^/]*?).([^/]*?.[^/]*)$ $1_$2 [N] RewriteRule ^(/?grafana/dashboard/db/.*/[^/]*?).([^/.]*)$ $1_$2 [R=301] 

 RewriteCond %{REQUEST_URI} ^(.*).(.*).(.*)/$ RewriteRule (.*).(.*).(.*)/ http://somedomainname.com/grafana/dashboard/db/$1_$2_$3/ [R=301] 

…和其他许多人

这可能是一个问题,因为我也使用proxypass ? 也许我只是俯视一些简单的东西? 任何帮助表示赞赏。

var-device=SF-some.machinename.comQUERY_STRING一部分,而不是REQUEST_URI 。 你的最后一条规则看起来不错,除非你需要跳过这段时间。

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

其中%1 = var-device=SF-some%2 = machinename%3 = com