2012-12-12 92 views
1

當前的vhost_config.conf具有可以工作的映射和重寫規則,如下所示。帶映射的RewriteMap忽略大小寫

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忽略大小寫。

你會說的第一件事是「add [NC]」,你認爲這是正確的,但它沒有任何效果。

我已經看到有關將所有映射以小寫形式引入的問題,但是這並不能解決某人在輸入/BlackFriday/BlaCKFridAY(無論出於何種原因可能會被迫做這樣的事情)的問題。

我遇到的問題是,用線如

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

沒有任何影響。

我是否需要在條件之一或映射聲明中提前標記[NC]

爲什麼第4行的'ignore-case'標誌不起作用? 還有別的東西,我錯過了?

+0

嗯,確實嵌套工作?從來沒有嘗試過,但像'RewriteMap lc int:tolower',&'$ {vanityURL:$ {lc:$ 1}}'? – Wrikken

+0

如果確實如此,現在所有映射的URL都是小寫字母,而不區分大小寫。 這會使基本問題依然存在。 –

+0

呃,你是_replacing_那部分的url。你只能匹配強制小寫字母。替換有一個固定的情況,不是嗎? – Wrikken

回答

1

這個作品在這裏:

列表「O網址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

...所以更換的情況下被保留,