mod_rewrite 将路径后的所有点替换为下划线

mod_rewrite 将路径后的所有点替换为下划线

我已经浏览过这里和 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

相关内容