【发布时间】:2012-08-01 14:26:20
【问题描述】:
如果一个特定的单词中有一个大写字母,我需要将其重写为小写,但如果它完全是小写则不需要(如果它匹配会导致无限循环)。
我想出了这个,但对它为什么不起作用感到困惑:
# /MaTcHeD to matched
RewriteCond %{REQUEST_URI} ^(?i)matched(\/.*)?$
RewriteRule ^[a-z]*[A-Z]+[^\/]*(\/.*)?$ /matched$1 [R=301,L]
对我而言,这表示如果 url 是“匹配”或“匹配”或“mAtched”或“MAtched”等或多个大写字符 ([A-Z]) 后跟任何非“/”字符,然后是 url 的其余部分(可选的“/”后跟其他任何字符)。如果这些条件为真,则重定向到小写的“/matched”。
我浏览并看到了许多匹配任何单词的解决方案,但这会导致问题,因为其他东西都是大写的。在任何情况下我只需要“匹配”,但所有小写都需要重定向到所有小写“匹配”。
【问题讨论】:
-
有什么理由不使用
RewriteMap? -
我研究过使用 RewriteMap,但它只会小写或大写所有没有帮助的东西。只要不是全部小写,我都需要匹配任何内容。
-
那么匹配前面规则中的所有小写字母并禁止重写或跳过小写规则。
标签: regex apache mod-rewrite url-rewriting rewrite