Apache-2.4

VirtualHosts 上的 Apache RewriteRule 不適用於組擷取正則表達式

  • October 18, 2017

我需要創建一個RewriteRule將 URL 路徑委託/tdg/image.jpg?mode=crop&width=300&height=300給本地代理。

代理需要將給定的 URL 轉換為以下格式。

http://localhost:8888/unsafe/300x300/smart/tdg/image.jpg

我首先嘗試使用ProxyPassMatchapache 指令,但無法從查詢字元串中檢索寬度和高度數據。

ProxyRequests On
ProxyPreserveHost On
ProxyPassMatch ^\/(tdg.+\.(?:png|jpeg|jpg|gif))\?mode=crop.+width=(d+)&height=(d+) http://localhost:8888/unsafe/$2x$3/smart/$1

我也試過RewriteRule

RewriteEngine On
RewriteRule ^\/(tdg.+\.(?:png|jpeg|jpg|gif))\?mode=crop.+width=(d+)&height=(d+) http://localhost:8888/unsafe/$2x$3/smart/$1

在這兩種情況下,代理的結果 URLhttp://localhost:8888/unsafe/x/smart/$1應該在哪裡http://localhost:8888/unsafe/300x300/smart/tdg/image.jpg

我不知道為什麼我不能使用正則表達式語法從查詢字元串中獲取widthand值。height``group

RewriteRule指令僅匹配路徑組件,不包括查詢字元串。嘗試:

RewriteEngine On
RewriteCond %{QUERY_STRING} mode=crop.+width=(\d+)&height=(\d+)
RewriteRule ^\/(tdg.+\.(?:png|jpeg|jpg|gif)) http://localhost:8888/unsafe/%1x%2/smart/$1 [P]

請注意使用RewriteCond. 為了使用來自這兩個地方的反向引用,對於來自的那些使用 %N,RewriteCond對於RewriteRule.

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