.htaccess - .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]
解决方案
您可以使用这 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 中的其他规则之前,并确保从新浏览器进行测试。
推荐阅读
- java - 如何使用 javafx/scene builder 将对象的链接列表添加到 TableView?
- php - 我不会写登录脚本
- visual-studio-app-center - AppCenter 测试分块失败:
- html - 你可以在 Angular 8 中设置使用 [disabled] 属性触发的元素的样式吗?
- javascript - 需要一些关于异步调用的 Angular Design 建议
- launchd - 在 Mac 上启动服务执行 bash 命令
- firebase - 使用 Firestore 在 StreamBuilder 上没有第一次获取数据
- amazon-web-services - 如何规范存储在 AWS Secrets Manager 上的私钥
- java - 解析字符串数组并选择特定的节点值
- java - 我需要帮助来显示 Java 13 中 20 个整数的输入集中的所有偶数