从网址中删除父类别

时间:2017-05-21 14:26:39

标签: .htaccess

我正在努力解决301重定向和htaccess的问题。我已将网站从旧域移动到新域。我已经成功地通过301重定向来实现这一目标。如此:

Redirect 301 / https://newdomain.com

在旧网站上,子类别网址如下:

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重定向。有没有办法从网址中删除父类别(可能因名称和数量而异)?

提前感谢任何建议,欢呼声

1 个答案:

答案 0 :(得分:6)

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

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

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

这假设路径段(即“product-category”,“parent-cat”和“child-cat”)仅包含字符a-zA-Z,{{1 },0-9_(连字符)。这需要尽可能具体,以免“过多”匹配。需要一个或多个“父母猫”。

-是对模式中第一个捕获的组的反向引用。即。 $1产品类别。并且([\w-]+)是对第二个捕获组的反向引用,即。 模式末尾的$2 child-cat 。中间的([\w-]+)“组”是非捕获组,因此没有适用于此的反向引用。

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