如何使用 ProxyHTMLURLMap 重写 URL?

如何使用 ProxyHTMLURLMap 重写 URL?

我的网址是这种形式

/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 结尾的 URL

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/Subpath-3/home.page

答案1

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和文件名之间至少有一个路径组件,而不是零个或多个,则可以将 更改*+

相关内容