首页 > 解决方案 > .htaccess 在一次 301 重定向中将所有“+”转换为“-”

问题描述

目标

我想替换所有 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]

标签: .htaccessredirect

解决方案


您可以使用这 2 个规则将每个规则替换+-

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]

确保将这些规则保留在站点根目录 .htaccess 中的其他规则之前,并确保从新浏览器进行测试。


推荐阅读