从 url 中删除父类别

Strip parent categories from url

我正在努力解决 301 重定向和 .htaccess 的问题。我已将网站从旧域移至新域。我已经成功地通过 301 重定向做到了这一点。像这样:

Redirect 301 / https://newdomain.com

在旧网站上子类别 URL 是这样的:

olddomain.com/product-category/parent-cat1/parent-cat2/child-cat

olddomain.com/product-category/parent-cat1/child-cat

olddomain.com/product-category/child-cat

而在新站点上它们是:

newdomain.com/product-category/child-cat

不幸的是,这会导致重定向出现 404。有什么方法可以从 URL?

中删除父类别(它们的名称和数量可能会有所不同)

尝试在现有 Redirect 指令 之前包含以下 RedirectMatch 指令:

RedirectMatch 302 ^/([\w-]+)/(?:[\w-]+/)+([\w-]+)$ https://newdomain.com//

RedirectMatch 指令是 Redirect 指令的补充,两者都是 mod_alias 的一部分。除了 RedirectMatch 指令使用正则表达式匹配 URL 路径,而 Redirect 使用简单的前缀匹配。

这假定路径段(即 "product-category"、"parent-cat" 和 "child-cat")仅由字符 a-zA-Z0-9_-(连字符)。这需要尽可能具体,以免匹配 "too much"。需要一个或多个 "parent-cat"。

</code> 是对 <em> 模式 </em> 中第一个捕获组的反向引用。 IE。 <code>([\w-]+)产品类别</code> 是对第二个捕获组的反向引用,即。 <code>([\w-]+) 模式 的末尾,child-cat。中间的(?:....)"group"是非捕获组,所以没有适用于此的反向引用。

这是一个 302(临时)重定向。只有当它工作正常时才将其更改为 301。使用 302 进行测试更容易,因为它们不会被浏览器缓存。因此,在测试之前,您需要确保浏览器缓存已清除。