从 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-z
、A-Z
、0-9
、_
和 -
(连字符)。这需要尽可能具体,以免匹配 "too much"。需要一个或多个 "parent-cat"。
</code> 是对 <em> 模式 </em> 中第一个捕获组的反向引用。 IE。 <code>([\w-]+)
,产品类别。 </code> 是对第二个捕获组的反向引用,即。 <code>([\w-]+)
在 模式 的末尾,child-cat。中间的(?:....)
"group"是非捕获组,所以没有适用于此的反向引用。
这是一个 302(临时)重定向。只有当它工作正常时才将其更改为 301。使用 302 进行测试更容易,因为它们不会被浏览器缓存。因此,在测试之前,您需要确保浏览器缓存已清除。
我正在努力解决 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-z
、A-Z
、0-9
、_
和 -
(连字符)。这需要尽可能具体,以免匹配 "too much"。需要一个或多个 "parent-cat"。
</code> 是对 <em> 模式 </em> 中第一个捕获组的反向引用。 IE。 <code>([\w-]+)
,产品类别。 </code> 是对第二个捕获组的反向引用,即。 <code>([\w-]+)
在 模式 的末尾,child-cat。中间的(?:....)
"group"是非捕获组,所以没有适用于此的反向引用。
这是一个 302(临时)重定向。只有当它工作正常时才将其更改为 301。使用 302 进行测试更容易,因为它们不会被浏览器缓存。因此,在测试之前,您需要确保浏览器缓存已清除。