.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
。
我的在线目录 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
。