我已经浏览过这里和 SO 上的所有标记问题,但我的问题不同,因为需要将“ .
”替换为“ _
”位于特定路径之后,而我正在运行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
重写引擎开启
ProxyPreserveHost 开启
ProxyPass /grafanahttp://100.65.7.97:3000
ProxyPassReverse /grafanahttp://100.65.7.97:3000
我花了几个小时搜索 serverfault/stackoverflow/webmasters.stackexchange/google 等,尝试了很多方法。但我尝试的方法都无法成功重定向。我不确定为什么。
我尝试过的一些东西(以及它们的变化):
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
?也许我只是忽略了一些简单的事情?任何帮助都值得感激。
答案1
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
。