从网址中删除父类别

noe*_*mcg 7 .htaccess

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

Redirect 301 / https://newdomain.com
Run Code Online (Sandbox Code Playgroud)

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

olddomain.com/product-category/parent-cat1/parent-cat2/child-cat
Run Code Online (Sandbox Code Playgroud)

要么

olddomain.com/product-category/parent-cat1/child-cat
Run Code Online (Sandbox Code Playgroud)

要么

olddomain.com/product-category/child-cat
Run Code Online (Sandbox Code Playgroud)

而在新网站上他们是:

newdomain.com/product-category/child-cat
Run Code Online (Sandbox Code Playgroud)

不幸的是,这导致404重定向.有没有办法从网址中删除父类别(可能因名称和金额而异)?

提前感谢任何建议,欢呼

MrW*_*ite 6

尝试包括下列RedirectMatch指令之前您现有的Redirect指令:

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

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

这假定路径段(即"产品类别","家长猫"和"子猫")由刚刚人物a-z,A-Z,0-9,_-(连字符).这需要尽可能具体,以免"过多"匹配.需要一个或多个"父母猫".

$1是对模式中第一个捕获组的反向引用.即.([\w-]+),产品类别.并且$2是对第二个被捕获组的反向引用,即.([\w-]+)模式的最后,孩子 - 猫.(?:....)中间的"组"是非捕获组,因此没有适用于此的反向引用.

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