用映射忽略大小写RewriteMap

时间:2012-12-12 22:17:45

标签: apache mod-rewrite

当前的vhost_config.conf具有可用的映射和重写规则,如下所示。

1: RewriteMap vanityURL txt: vanity_map.txt
2: RewriteCond ${vaintyURL:$1|not-found} ^(.+)$
3: RewriteCond %1 ~^not-found$
4: RewriteRule ^/(.*) /${vanityURL:$1|/$1} [L]

我需要发生的是映射的URLS忽略大小写。

你要说的第一件事是“添加[NC]”,你认为这是正确的,但它没有任何影响。

我见过有关将所有映射都以小写字母表示的问题,但这并没有解决有人在/BlackFriday/BlaCKFridAY中输入的问题(无论出于何种原因,可能会被迫做这样的事情。)

我遇到的问题是使用诸如

之类的行
  RewriteRule ^/(.*) /${vanityURL:$1|/$1} [L, NC]

没有影响。

我是否需要在其中一个条件或地图声明中提前使用[NC]标志?

为什么第4行的'ignore-case'标志不起作用? 还有其他我缺少的东西吗?

1 个答案:

答案 0 :(得分:2)

这可以在这里工作:

列出'o urls list.txt

 test1 POMPOM
 test2 pompom
 test3 PomPom

apache主机配置:

RewriteEngine On
RewriteMap lc int:tolower
RewriteMap test txt:/var/www/list.txt
RewriteRule /(.*)$ /${test:${lc:$1}|$1} [R=301]

(外部重定向,因此在此测试中更容易观察到)

这意味着:

example.com/TEST1 
example.com/test1
example.com/TeSt1

...全部重定向到example.com/POMPOM

example.com/TEST2 
example.com/test2
example.com/TeSt2

...全部重定向到example.com/pompom

...所以保留了替换的情况,