我正在努力解决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重定向。有没有办法从网址中删除父类别(可能因名称和数量而异)?
提前感谢任何建议,欢呼声
答案 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-z
,A-Z
,{{1 },0-9
和_
(连字符)。这需要尽可能具体,以免“过多”匹配。需要一个或多个“父母猫”。
-
是对模式中第一个捕获的组的反向引用。即。 $1
,产品类别。并且([\w-]+)
是对第二个捕获组的反向引用,即。 模式末尾的$2
, child-cat 。中间的([\w-]+)
“组”是非捕获组,因此没有适用于此的反向引用。
这是302(临时)重定向。只有在工作正常时才将其更改为301。使用302s测试更容易,因为它们不是由浏览器缓存的。因此,在测试之前,您需要确保浏览器缓存已清除。