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 / 圖形http://100.65.7.97:3000
ProxyPassReverse /grafana http://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
嗎?也許我只是忽略了一些簡單的事情?任何幫助表示讚賞。
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
。