Dot-Htaccess

mod_rewrite 在路徑後用下劃線替換所有點

  • March 4, 2016

我已經在這里和 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

引用自:https://serverfault.com/questions/761463