我试图分裂任何网址,将显示在我的网站分为三个部分:
1.语言(可选)
1.页面的层次结构(父级)
1.当前页
现在我用1和3操作,但我需要开发一种方法,允许页面具有相同的名称,如果他们有不同的父母,因此完整的URL是唯一的。
以下是我可能拥有的URL类型:
(nothing)
en
en/test
en/parent/test
test
parent/test
ggparent/gparent/parent/test
我考虑过延长我目前的指令:
RewriteRule ^(?:([a-z]{2})(?=\/))?.*(?:\/([\w\-\,\+]+))$ /index.php?lang=$1&page=$2 [L,NC]
改为:(?:([a-z]{2})(?=\/))?(.*)\/([^\/]*)?$
然后我可以将其转换为index.php?lang=$1&tree=$2&page=$3
,但我遇到的困难是,第二个捕获组从一开始就捕获斜杠。
我认为我不能(根据我目前的搜索)动态地返回斜杠之间的所有字符串,并使最后一个总是第一个,而不重复相同的正则表达式。我想我会捕获语言和当前页面之间的任何内容,并在PHP中处理树。
然而,我目前的正则表达式有一些问题,我不能找出他们:
1.如果语言是独立的,它就不会被捕捉到
1.第二组捕捉语言和树之间的斜线
Regex101链接:https://regex101.com/r/ecHBQT/1
2条答案
按热度按时间pkwftd7m1#
这很可能是:在适当的位置用斜杠将URL拆分为lang、tree和page,这三个部分都可以为空:
JavaScript中使用此正则表达式的测试用例:
输出:
注:
liwlm1x92#
希望我没理解错你的问题,你可以试试这个正则表达式:
Regex demo.
这将匹配3组:首先是语言(两个字符),然后是父组,最后一个组是URL的最后一部分(
/
之后)。