在.htaccess中用正则将URL拆分为三部分的问题
URL拆分与RewriteRule正则优化问题
我需要将网站任意URL拆分为三个部分:
- 语言(可选)
- 页面层级结构(父级页面)
- 当前页面
目前仅处理了第1和第3部分,现在要实现一种机制,允许页面在父级不同时使用相同名称(保证完整URL唯一)。
可能的URL类型:
(nothing) en en/test en/parent/test test parent/test ggparent/gparent/parent/test
现有与修改后的正则方案
原本使用的RewriteRule指令:
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中处理层级结构,但当前正则存在两个问题:
- 仅输入语言时,该语言不会被捕获
- 第二个捕获组会捕获语言与层级结构之间的斜杠
内容的提问来源于stack exchange,提问作者Moseleyi
相关产品推荐
相关产品推荐

