.htaccess转换所有'+';至'-';在一个301重定向中

.htaccess转换所有'+';至'-';在一个301重定向中,.htaccess,redirect,.htaccess,Redirect,目标 我想替换所有URL的“+”符号,并将它们转换为“-”。URL中可以有任意数量的“+”并且可以有任意数量的斜杠。我不想重写搜索页面 示例 每个示例的第一行是原始URL。第二个是我想要的301重定向URL https://domain.co.uk/used+cars https://domain.co.uk/used-cars https://domain.co.uk/accessories/car+accessories/ferrari+accessories https://domain

目标

我想替换所有URL的“+”符号,并将它们转换为“-”。URL中可以有任意数量的“+”并且可以有任意数量的斜杠。我不想重写搜索页面

示例

每个示例的第一行是原始URL。第二个是我想要的301重定向URL

https://domain.co.uk/used+cars
https://domain.co.uk/used-cars

https://domain.co.uk/accessories/car+accessories/ferrari+accessories
https://domain.co.uk/accessories/car-accessories/ferrari-accessories

https://domain.co.uk/accessories/car+repair+supplies/old+cars/even+older+cars
https://domain.co.uk/accessories/car-repair-supplies/old-cars/even-older-cars
到目前为止

这段代码可以工作,但我可以从Firefox开发工具中看到,它实际上为遇到的每一个“+”都创建了301重定向。这可以在一个301重定向中完成吗

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(.*?)(?:,|\+)+(.+?)\sHTTP [NC]
RewriteCond %{REQUEST_URI} !^/search
RewriteRule ^ /%1-%2 [L,NE,R=301]

您可以使用这两条规则将每个
+
替换为
-

RewriteEngine On

# executes repeatedly as long as there are multiple + in URI
RewriteRule "^([^+]*)\+([^+]+\+.*)$" $1-$2 [N,DPI]

# executes when there is a single + in URI
RewriteRule "^([^+]*)\+([^+]*)$" /$1-$2 [L,R=301,NE]
确保将这些规则放在site root.htaccess中的其他规则之前,并确保从新浏览器进行测试