.htaccess - 从 url 中去除父类别

标签 .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。有什么方法可以从 url 中删除父类别(可能因名称和数量而异)?

提前感谢您的任何建议,干杯

最佳答案

尝试包含以下内容 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 , 0-9 , _- (连字符)。这需要尽可能具体,以免匹配“太多”。需要一只或多只“母猫”。
$1是对模式中第一个捕获组的反向引用。 IE。 ([\w-]+) ,产品类别。和 $2是对第二个捕获组的反向引用,即。 ([\w-]+)在模式的末尾,小猫。 (?:....)中间的“组”是一个非捕获组,因此没有适用于此的反向引用。

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

关于.htaccess - 从 url 中去除父类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44098024/

相关文章:

php - 在目录 .htaccess 中不给任何人访问权限

.htaccess - .htpasswd/.htaccess 出现 500 内部服务器错误

.htaccess - htaccess : forcing https and www if not on localhost

apache - 仅当文件不存在时才使用代理

.htaccess - Nginx:在 https 上将非 www 重定向到 www

.htaccess - .htaccess 中的重定向规则将我带到了错误的地方

.htaccess - API在url中配置参数

javascript - 如何为基于 html 和 javascript 的网站创建干净的 url

php - .htaccess;无需延期

http - 仅为主页域从 HTTPS 重定向到 HTTP