首页 > 解决方案 > 使用 htaccess 从 URL 中删除单词

问题描述

我正在尝试从 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 中删除所有类别名称。有什么捷径吗?或者我们可以在数组中添加所有类别名称以检查是否存在然后规则将其删除?

标签: .htaccess

解决方案


对于您遇到的问题,您可以调整您的正则表达式以使用[^/]+而不是.*因为.*匹配最长的可能字符串,因此当您希望您的第二条规则为 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]

推荐阅读