You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在.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中处理层级结构,但当前正则存在两个问题:

  1. 仅输入语言时,该语言不会被捕获
  2. 第二个捕获组会捕获语言与层级结构之间的斜杠

内容的提问来源于stack exchange,提问作者Moseleyi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 19:26:14