2

如果一个特定的单词中有一个大写字母,我需要将它重写为小写,但如果它完全是小写则不需要(如果它匹配它会导致无限循环)。

我想出了这个,但对它为什么不起作用感到困惑:

# /MaTcHeD to matched
RewriteCond %{REQUEST_URI} ^(?i)matched(\/.*)?$
RewriteRule ^[a-z]*[A-Z]+[^\/]*(\/.*)?$ /matched$1 [R=301,L]

对我来说,这表示如果 url 是“matched”或“Matched”或“mAtched”或“MAtched”等,那么如果在 url 的开头有任何小写字符 ([az]) 后跟任何一个或多个大写字母,则匹配字符 ([AZ]) 后跟任何非“/”字符,然后是 url 的其余部分(可选的“/”后跟其他任何字符)。如果这些条件为真,则重定向到小写的“/matched”。

我浏览并看到了许多匹配任何单词的解决方案,但这会导致问题,因为其他东西都是大写的。在任何情况下我都只需要“匹配”,但所有小写都需要重定向到所有小写“匹配”。

4

1 回答 1

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}变量确实有一个前导斜杠,但用于匹配的 URIRewriteRule 没有一个(见图)。

于 2012-08-02T01:39:01.610 回答