【发布时间】:2021-02-21 22:32:32
【问题描述】:
我正在尝试组装一个正则表达式,以将包含大写字符的 URL 重写为相同的 URL,但全部小写。
例子:
example.com/foO-BAR-bAz重写为example.com/foo-bar-baz
example.com/FOO-BAR-BAZ改写为example.com/foo-bar-baz
example.com/foo-bar-baz不匹配
我尝试^\/(?=.*[A-Z]) 匹配一个至少包含一个大写字符的字符串,但它与完整的字符串不匹配。我也知道我需要使用“捕获组”,但我不确定如何。
我将在 Apache 服务器的 .htaccess 文件中实现此重定向规则
【问题讨论】:
-
这(特别是替换部分)不应该在 .htaccess 中完成。对于使用内部
tolower函数的RewriteMap,这将是一个完美的用例,但这需要访问服务器配置/虚拟主机。如果这不是一个选项,那么我会将这些请求重写为一个很小的脚本(PHP 或任何可用的脚本),它包含小写字母的一部分,并发出外部重定向。 -
还有一个一般性的提示:与其问如何做到这一点,您是否考虑过实际阅读一些有关正则表达式的知识?我的意思是它们 1. 有很好的文档和 2. 程序员应该知道的基本知识之一......
-
@CBroe 在 Apache 2.4 上,您可以使用
.htaccess中的tolower()函数和RewriteCond指令中的 Apache 表达式。 (见下面的my answer。)
标签: regex .htaccess url-rewriting