Apache将word重写为小写

时间:2012-08-01 14:26:21

标签: regex apache mod-rewrite url-rewriting rewrite

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

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

# /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”。

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

1 个答案:

答案 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不是有一个(去图)。