.htaccess 删除 URL 的重复部分

.htaccess remove duplicate part of a URL

我的在线目录 SEF URL 生成中的一些错误导致某些类别 slug 被添加到 URL 两次。为了解决这个问题,我想使用 .htaccess 删除 URL 的这一部分,并让整个 URL 向上移动一个级别,包括 URL's,其中还包括它们下面的产品.

重复项属于类别 tools

下的子类别 painting-tools

所以错误的 URL 看起来像这样: /store/items/catalog/tools/painting-tools/painting-tools 要么 /store/items/catalog/tools/painting-tools/painting-tools/{某些产品}

而不是像这样的正确 URL:

 /store/items/catalog/tools/painting-tools

或 /store/items/catalog/tools/painting-tools/{某些产品}

和 URLs

  /store/items/catalog/tools/painting-tools/

或 /store/items/catalog/tools/painting-tools/{某些产品}

其实应该是这样的

  /store/items/catalog/tools

或 /store/items/catalog/tools/{一些产品}

尝试使用此规则,但它不起作用

RewriteRule ^/painting-tools/painting-tools/(.*) /painting-tools/ [QSA]

我认为 ^ 部分不正确,因为它不是 URL 的开头。 我该如何解决? 谢谢

您可以将此基于反向引用的重定向规则用作 .htaccess 中的第一条规则

RewriteRule ^(.+?/([^/]+))/(/.*)?$ / [NE,L,R=302]

RewriteRule ^(.+?/tools)/painting-tools(?:/.*)?$ / [L,NC,R=302]

它正在捕获初始部分之后的重复值并将其分组在此子模式中([^/]+)。稍后在正则表达式中,它使用反向引用 </code> 来确保重复捕获的相同值。</p> <p><strong>请确保在您的 htaccess 所在的位置为 <code>//store/ 定义了正确的 RewriteBase


更新: 根据下面的讨论:

RewriteRule ^(.+?/tools)/painting-tools2(/.*)?$  [L,NC,R=302]

这将从网址中删除 /painting-tools2