Apache HTTP Server 版本 2.4
說明 | 對應答主體執行搜尋與取代作業 |
---|---|
狀態 | 擴充功能 |
模組識別碼 | substitute_module |
原始程式碼檔案 | mod_substitute.c |
相容性 | 適用於 Apache HTTP Server 2.2.7 及後續版本 |
mod_substitute
提供一種機制來對應答主體執行正規表達式和固定字串取代作業。
說明 | 進行回應內容過濾的樣式 |
---|---|
語法 | Substitute s/pattern/substitution/[infq] |
內容 | 目錄、.htaccess |
覆寫 | FileInfo |
狀態 | 擴充功能 |
模組 | mod_substitute |
Substitute
指令指定要套用到回應主體的搜尋和取代樣式。
可透過使用以下任一旗標組合來修正樣式的意義
i
n
n
旗標會強制將樣式視為固定字串。f
f
旗標會使 mod_substitute
將取代結果扁平化,這樣就能讓後續的取代作用於此取代的邊界。這是預設值。q
q
旗標會使 mod_substitute
在每次取代後不將區塊扁平化。這可以大幅提升回應速度並減少記憶體使用量,但只應在無法讓某個取代結果與後續取代的樣式或正規表達式進行配對時使用。substitution 可能包含文字字面值與正規表達式反向參照
<Location "/"> AddOutputFilterByType SUBSTITUTE text/html Substitute "s/foo/bar/ni" </Location>
用於區分 (或「分隔」) 取代字串各部分的字元稱為「分隔字元」,且最常用來做這個用途的是斜線。
如果模式或替換包含一個斜線字元,那麼可以使用一個替代的分隔符號,以使得指令更易讀
<Location "/"> AddOutputFilterByType SUBSTITUTE text/html Substitute "s|<BR */?>|<br />|i" </Location>
在使用常規表達式時,反向引用可以應用於比較和替換中,如下面的範例所示
<Location "/"> AddOutputFilterByType SUBSTITUTE text/html # "foo=k,bar=k" -> "foo/bar=k" Substitute "s|foo=(\w+),bar=\1|foo/bar=$1|" </Location>
mod_substitute
的常用場景是,前端伺服器將請求代理給後端伺服器,而後者會傳回包含硬編碼嵌入 URL 的 HTML,這些 URL 會指向後端伺服器。由於後端伺服器不可訪問,因此這些 URL 對最終使用者不起作用
在此情況下,mod_substitute
可以用於將這些 URL 改寫為可以從前端正常運作的內容
ProxyPass "/blog/" "http://internal.blog.example.com/" ProxyPassReverse "/blog/" "http://internal.blog.example.com/" Substitute "s|http://internal.blog.example.com/|http://www.example.com/blog/|i"
ProxyPassReverse
會修改由後端伺服器發出的任何 Location
(重新導向)標頭,並且,在此範例中,Substitute
會處理問題的其餘部分,同時修復 HTML 回應
說明 | 變更繼承模式的合併順序 |
---|---|
語法 | SubstituteInheritBefore on|off |
預設值 | SubstituteInheritBefore off |
內容 | 目錄、.htaccess |
覆寫 | FileInfo |
狀態 | 擴充功能 |
模組 | mod_substitute |
相容性 | 於 httpd 2.4.17 和之後的版本中提供 |
是否先套用繼承的 Substitute
模式(on
),或在套用當前內容的模式之後套用(off
)。SubstituteInheritBefore
本身會被繼承,因此繼承它的內容(那些未指定自己的 SubstituteInheritBefore
值)將套用最接近的定義合併順序
說明 | 設定最大行長 |
---|---|
語法 | SubstituteMaxLineLength bytes(b|B|k|K|m|M|g|G) |
預設值 | SubstituteMaxLineLength 1m |
內容 | 目錄、.htaccess |
覆寫 | FileInfo |
狀態 | 擴充功能 |
模組 | mod_substitute |
相容性 | 於 httpd 2.4.11 和之後的版本中提供 |
mod_substitute
處理的最大行長受到限制,以減少記憶體用量。可以使用 SubstituteMaxLineLength
設定限制。值可以 bytes 數來表示,並可以加上一個單一字母 b
、B
、k
、K
、m
、M
、g
、G
為後綴,分別表示 byte、kilobyte、megabyte 或 gigabyte
<Location "/"> AddOutputFilterByType SUBSTITUTE text/html SubstituteMaxLineLength 10m Substitute "s/foo/bar/ni" </Location>