2011-11-27 157 views
0

我的服務器上有靜態的子文件夾。 我要的只是Apache以正確的方式轉發它們。 與正常的英文子文件夾,我沒有問題。 example.com/asd - >/srv/fdr/asd。 當請求包含非ASCII字母時,它會像這樣轉換它們Büc - > B%C3%BCc,而我的文件夾名爲/ srv/fdr /Büc(在utf8中),Apache將它轉發到/ srv/fdr/B %C3%BCC。Apache編碼ascii到utf8

有關如何更改URL路徑請求的編碼的任何想法?

感謝

回答

2

您可以使用RewriteMapINT(內部函數)來創建一個UNESCAPE地圖(雖然它被稱爲 「越獄」)。由於這是一個RewriteMap指令,它需要在任一服務器配置(httpd.conf文件)或虛擬主機配置:

RewriteMap unescape int:escape 

現在你可以使用$ {UNESCAPE:}你的反向引用。所以,如果你匹配一個已經有字符轉義的URI,你可以把你的反向引用包含進來,以便避免失敗。例如:

# Need this to avoid rewrite-looping 
RewriteCond %{REQUEST_URI} !^/srv/fdr 
RewriteRule ^(.+)$ /srv/fdr/${unescape:$1} [L,NE] 

這將採取URI /B%C3%BCc並重寫/srv/fdr/Büc

另外請注意,如果你把重寫規則您的服務器或虛擬主機的配置裏面,你需要前添加/正則表達式匹配中的(。+)