我需要将一个特定的单词重写为小写,如果它有一个大写字母,但如果它完全是小写的话,则不需要重写(如果匹配它会导致无限循环)。
我提出了这个问题,但对于它为什么不起作用感到困惑:
# /MaTcHeD to matched
RewriteCond %{REQUEST_URI} ^(?i)matched(\/.*)?$
RewriteRule ^[a-z]*[A-Z]+[^\/]*(\/.*)?$ /matched$1 [R=301,L]
对我来说,如果url是“匹配”或“匹配”或“mAtched”或“MAtched”等,那么匹配是否在网址开头有任何小写字符([az])后跟任何一个或更多大写字符([AZ])后跟任何非“/”字符,然后是其余的url(可选的“/”后跟其他任何内容)。如果这些条件为真,则重定向到小写“/ matched”。
我浏览过并看过许多与任何单词匹配的解决方案,但这会导致问题,因为其他内容都是大写的。在任何情况下我都需要“匹配”,但所有小写都要重定向到全部小写“匹配”。
答案 0 :(得分:1)
您可以执行几项检查来解决此问题,首先检查它是否完全不是小写:
RewriteCond %{REQUEST_URI} !^(.*)/matched(.*)$
然后检查如果使用[NC]
标志忽略大小写,那么它是否匹配:
RewriteRule ^(.*)/matched(.*)$ /$1/matched$2 [R=301,L,NC]
此时,您知道没有区分大小写,matched
匹配,但它不是全部小写,因此您可以重定向到全部小写。
我正在使用当前在htaccess级别的匹配,所以我不需要初始的“(。*)/”。使用它是行不通的。 “匹配”是域
之后的第一个路径部分
然后试试这个:
RewriteCond %{REQUEST_URI} !^/matched(.*)$
RewriteRule ^matched(.*)$ /matched$1 [R=301,L,NC]
问题是%{REQUEST_URI}
变量确实有一个前导斜杠,但用于匹配RewriteRule
的URI不是有一个(去图)。