Regex 如果url有后缀并且可以有结尾,请在.htaccess中设置重定向

Regex 如果url有后缀并且可以有结尾,请在.htaccess中设置重定向,regex,apache,.htaccess,mod-rewrite,redirect,Regex,Apache,.htaccess,Mod Rewrite,Redirect,在我的客户分类页面的Virtuemart网站上,有如下URL: example.com/vm-search/level1category-cityname/level2category-cityname or example.com/vm-search/level1category-cityname/level2category-cityname/level3category-cityname or example.com/vm-search/.../-cityname/result,9-10

在我的客户分类页面的Virtuemart网站上,有如下URL:

example.com/vm-search/level1category-cityname/level2category-cityname
or
example.com/vm-search/level1category-cityname/level2category-cityname/level3category-cityname
or
example.com/vm-search/.../-cityname/result,9-10 (digits may be any numbers from 1 to N)
我需要一个.htaccess的重定向规则,该规则将动态删除所有citynames,除了最后一个城市,其余城市也是
result,9-10
,如果它是url的结尾,即结果必须如下所示:

example.com/vm-search/level1category/level2category-cityname
or
example.com/vm-search/level1category/level2category/level3category-cityname
or
example.com/vm-search/level1category/level2category-cityname/result,9-10 (digits may be any numbers from 1 to N)
or
example.com/vm-search/level1category/level2category/level3category-cityname/result,9-10 (digits may be any numbers from 1 to N)

请不要将问题视为的重复项,因为它有另一个条件

您可以使用以下正则表达式进行匹配并替换为空字符串:

类似于以下内容(检查语法):

如果您想拥有通用关键字。。使用以下命令:

-([^\/\s]+)(?=.*-\1)

您可以在root.htaccess中使用此规则

RewriteRule ^(vm-search)/(?:([^-]+)-[^/]+/)+?([^/-]+-(?=[a-z])[^/]+(?:/.*)?)$ /$1/$2/$3 [L,NC,R=302]

编辑:如果要避免多次重定向请使用如下env变量:

RewriteRule ^(vm-search)/(?:([^-]+)-[^/]+/)+?([^/-]+-(?=[a-z])[^/]+(?:/.*)?)$ /$1/$2/$3 [NC,L,E=IS_REDIR:1]

RewriteCond %{ENV:REDIRECT_IS_REDIR} =1
RewriteRule . %{REQUEST_URI} [L,R=302]

我相信
cityname
在这里不是一个静态文本。如果使用
Rewrite-cityname(?=.*cityname)[L,NC,R=302]
Rewrite-([^\/\s]+)(?=.-\1)[L,NC,R=302]
我得到500个内部服务器错误,我不知道htaccess语法。。正则表达式工作正常。。也许@anubhava能帮上忙?
RewriteRule ^(vm-search)/(?:([^-]+)-[^/]+/)+?([^/-]+-(?=[a-z])[^/]+(?:/.*)?)$ /$1/$2/$3 [L,NC,R=302]
RewriteRule ^(vm-search)/(?:([^-]+)-[^/]+/)+?([^/-]+-(?=[a-z])[^/]+(?:/.*)?)$ /$1/$2/$3 [NC,L,E=IS_REDIR:1]

RewriteCond %{ENV:REDIRECT_IS_REDIR} =1
RewriteRule . %{REQUEST_URI} [L,R=302]