我的网址是这种形式
/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
和文件名之间至少有一个路径组件,而不是零个或多个,则可以将 更改*
为+
。