.htaccess删除URL的重复部分

时间:2015-09-08 11:27:04

标签: .htaccess mod-rewrite redirect http-status-code-301

我的在线目录中的一些错误SEF URL生成创建了一种情况,其中一些类别slug被添加到URL两次。为了解决这个问题,我想使用.htaccess来删除URL的这一部分,并将整个URL向上移动一级,包括URL,其中还包含一个产品。

重复出现属于painting-tools

类别下的子类别tools

所以错误的网址如下所示:     /存储/项目/目录/工具/绘画工具/绘画工具 要么     / store / items / catalog / tools /绘画工具/绘画工具/ {some product}

而不是像这样的正确网址:

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

或      / store / items / catalog / tools / painting-tools / {some product}

和网址

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

或       / store / items / catalog / tools / painting-tools / {some product}

实际上应该是这样的

  /store/items/catalog/tools

或       / store / items / catalog / tools / {some product}

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

在初始部分之后捕获重复值并将其分组到此子模式([^/]+)中。在正则表达式的后面,它使用反向引用\2来确保重复相同的捕获值。

确保您的htaccess所在位置RewriteBase/都有/store/ {/ strong>

更新:根据以下讨论:

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

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