我已经在这里和所有标记的问题,但我的问题是不同的,因为要么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.com是QUERY_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 。