我的在线目录中的一些错误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的开头。 我该如何解决? 感谢
答案 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
。