<-
Apache > HTTP Server > 文件 > 版本 2.4 > 模組

Apache 模組 mod_substitute

可用語言:  en  |  fr 

說明對應答主體執行搜尋與取代作業
狀態擴充功能
模組識別碼substitute_module
原始程式碼檔案mod_substitute.c
相容性適用於 Apache HTTP Server 2.2.7 及後續版本

摘要

mod_substitute 提供一種機制來對應答主體執行正規表達式和固定字串取代作業。

Support Apache!

指令

漏洞修正清單

另請參閱

top

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 改寫為可以從前端正常運作的內容

改寫代理內容中嵌入的 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 回應

top

SubstituteInheritBefore 指令

說明變更繼承模式的合併順序
語法SubstituteInheritBefore on|off
預設值SubstituteInheritBefore off
內容目錄、.htaccess
覆寫FileInfo
狀態擴充功能
模組mod_substitute
相容性於 httpd 2.4.17 和之後的版本中提供

是否先套用繼承的 Substitute 模式(on),或在套用當前內容的模式之後套用(off)。SubstituteInheritBefore 本身會被繼承,因此繼承它的內容(那些未指定自己的 SubstituteInheritBefore 值)將套用最接近的定義合併順序

top

SubstituteMaxLineLength 指令

說明設定最大行長
語法SubstituteMaxLineLength bytes(b|B|k|K|m|M|g|G)
預設值SubstituteMaxLineLength 1m
內容目錄、.htaccess
覆寫FileInfo
狀態擴充功能
模組mod_substitute
相容性於 httpd 2.4.11 和之後的版本中提供

mod_substitute 處理的最大行長受到限制,以減少記憶體用量。可以使用 SubstituteMaxLineLength 設定限制。值可以 bytes 數來表示,並可以加上一個單一字母 bBkKmMgG 為後綴,分別表示 byte、kilobyte、megabyte 或 gigabyte

範例

<Location "/">
    AddOutputFilterByType SUBSTITUTE text/html
    SubstituteMaxLineLength 10m
    Substitute "s/foo/bar/ni"
</Location>

可用語言:  en  |  fr 

top

留言

注意事項
此區不是問答區。在這裡發布的評論應為改善文件或伺服器的建議,如果這些評論已實作或被視為無效/離題,我們的管理員可能會將其移除。有關如何管理 Apache HTTP 伺服器的問題應導向我們在 Libera.chat 上的 IRC 頻道 #httpd,或傳送到我們的郵件清單