Apache-2.4

如何使用 ProxyHTMLURLMap 重寫 url?

  • May 10, 2021

我的網址是這種形式

/sites/site-name/Subpath-2/page-name.page
/sites/site-name/Subpath-3/Subpath-4/index.page

這應該被重寫為/sitename/subpath/pagename (刪除擴展.page名)子路徑也可以有多個文件夾,即(/sites/site-name/Subpath-2/…./page-name.page)

如果我們有一個以 index.page 結尾的 url,那麼我們必須刪除 index.page 例如:

/sites/site-name/...subpath.../index.page應該是/sites/site-name/...subpath.../

我嘗試過以這種方式使用反向引用

ProxyHTMLURLMap "\/sites\/([A-Za-z-0-9]+|-)\/([A-Za-z-0-9]+|-)\/([A-Za-z-0-9]+|-)\.page$" "/$1/$2/$3" R

對於以 index 結尾的網址

ProxyHTMLURLMap "\/sites\/([A-Za-z-0-9]+|-)\/([A-Za-z-0-9]+|-)\/(index)\.page$" "/$1/$2/" R

但是我需要重寫 URL,這樣子路徑可以很多,即它應該適用於任何可以具有三個以上子路徑的 URL, 它需要為/sites/site-name/Subpath-3/Subpath-4/index.page /sites/site-name/Subpath-1/Subpath-2/ 工作子路徑 3/home.page

ProxyHTMLURLMap "\/sites((\/([A-Za-z-0-9]+|-))*)\/([A-Za-z-0-9]+|-)\.page$" "$1/$4" R

把它分開:

  • ((\/([A-Za-z-0-9]+|-))*)是任意數量的路徑組件 - 零個或多個 - 跟隨/sites。每個組件都以/. 所有路徑組件的整個字元串都儲存在$1.
  • 最後是([A-Za-z-0-9]+|-)\.page$,以 . 結尾的文件名.page。它的結果儲存在 中$4,因為它從表達式中的第 4 個左括號開始。

如果您希望在文件名和文件名之間至少需要一個路徑組件/sites,而不是零個或多個,您可以*+.

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