我正在尝试从url中删除类别名称。我使用以下规则。
要从url中删除单个类别名称,我正在尝试以下操作。这工作正常。
RewriteEngine On
RewriteRule ^(.*)/man/(.*).html$ /$1/$2.html [NC,R=301,L]
http://www.test.com/en/man/product-1.html
Output: http://www.test.com/en/product-1.html
要从url中删除多个子类别名称,我正在尝试以下操作。
RewriteEngine On
RewriteRule ^(.*)/man/(.*).html$ /$1/$2.html [NC,R=301,L]
RewriteRule ^(.*)/man/jeans/(.*).html$ /$1/$2.html [NC,R=301,L]
http://www.test.com/en/man/jeans/product-1.html
Output: http://www.test.com/en/jeans/product-1.html
**expected: http://www.test.com/en/product-1.html**
我有大约30个类别,我想使用htaccess从url中删除所有类别名称。有近路吗?或者,我们可以在数组中添加所有类别名称来检查是否存在,然后规则会删除它吗?
对于您遇到的问题,您可以调整正则表达式以使用[^/]+
而不是.*
,因为.*
匹配尽可能长的字符串,因此当您希望为URI/en/man/jeans/product-1.html
执行第二条规则时,会执行第一条规则。像这样:
RewriteEngine On
RewriteRule ^([^/]+)/hands/jeans/([^/.]+).html$ /$1/$2.html [NC,NE,R=301,L]
RewriteRule ^([^/]+)/hands/([^/.]+).html$ /$1/$2.html [NC,NE,R=301,L]
您还可以使用将第一条规则设置为通用,以覆盖所有30个类别
RewriteRule ^([^/]+)/hands/[^/]+/([^/.]+).html$ /$1/$2.html [NC,NE,R=301,L]