2012-08-01 190 views
2

如果字母中包含大写字母,但如果它完全小写(如果匹配,则会导致无限循环),则需要将其重写为小写字母。Apache将小写字母重写为

我想出了这一点,但很困惑,为什么它不工作:

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

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

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

+0

任何不使用'RewriteMap'的理由? – 2012-08-01 15:26:42

+0

我使用RewriteMap进行了研究,但它只是小写或大写,没有任何帮助。我需要匹配任何东西,只要它不全是小写。 – Jim 2012-08-02 17:53:14

+0

然后在先前的规则中匹配所有小写字母,并禁止重写或跳过低分组规则。 – 2012-08-02 19:23:33

回答

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}变量确实有斜线,但URI用于匹配RewriteRule没有有一个(去图)。

+0

Hm ...我使用RewriteCond%{REQUEST_URI}!^匹配(\ /.*)$ $和RewriteRule ^匹配(\ /.*)$ $ /匹配$ 1 [R = 301,L,NC]一个重定向循环。我正在使用目前在htaccess级别的匹配,所以我不需要最初的“(。*)/”。使用它不起作用。 “匹配”是域之后的第一个路径部分。 – Jim 2012-08-02 17:13:21

+0

Apache中的重定向日志没有多大帮助。我把它设置为max,它只是说它匹配“^匹配(\ /.*)?$”但没有说别的。它甚至没有说RewriteCond是匹配的。 – Jim 2012-08-02 18:44:50

+0

@Jim对不起,我更新了答案,您需要在'RewriteCond'中引用'/'。 – 2012-08-02 18:58:04

相关问题