2013-08-24

如何讓Apache在編碼設定上自動一些

其實我不知道這個標題要怎麼下

說明一下狀況好了…就是,apache我用yum安裝好之後,他在httpd.conf的預設上已經使用了AddDefaultCharset UTF8了…這一點,其實沒什麼問題…

但,其實這個會跟瀏覽器上的「自動編碼」有一些關係…(不過似乎在IIS上比較沒有相關)

一般來說,瀏覽器的自動編碼是依照網頁上<head></head>中使用meta來寫content的charset時有相關…中文地區比較常用的就是大陸的gbxxxx,還有我們的big5與現在要多加習慣的utf-8



當瀏覽器接收到head設定的文件編碼時,自動編碼就會自己調整到該網頁的設定…(註:單純的在content設定charset還不一定正確,因為得看你文件儲存時設定的編碼…這有點複雜,所以多用網頁編輯工具比較好)

但其實,早在瀏覽器接收到head設定的文件編碼前,一般網頁伺服器在封包的header就會先加上預設傳輸編碼了…比如Apache config中的addDefaultCharset…這就是apache的http service在client連線時先告知client的browser連線編碼…

所以,一般的狀況,在設定AddDefaultCharset UTF-8的情況下開啟html head 設定meta content的charset為big5的網頁時,該網頁就會變成亂碼…其道理就是:
Client's Browser: xxx 網站嗎,我要進來看網頁。
xxx http service: 哦,好呀,那請你使用UTF-8編碼的方式來連線。
Client's Browser: 哦,好的…我已改為使用UTF-8編碼的方式了,請給我看abc.html
xxx http service: abc.html是嗎?好的,已為你準備好abc.html了,請好好觀看。
Client's Browser: @#$%)T$%)_RTW$%,靠,為什麼都是亂碼…
xxx http service: 因為abc.html網頁是要用big5 編碼觀看的呀,請你要改為big5編碼唷。
Client's Browser: 靠~~~
大概的溝通方式如上

所以,為了讓連線時不要有誤會,所以要讓伺服器直接送出多國語系支援的網站

可以在httpd.conf中,加上如下紅色所標
<Directory /var/www/html>
    ......
    ......
    Options MultiViews ....................
    ......
    .....
</Directory>
這樣就可以同時在一個站台底下瀏覽不同中文語系的網頁時,不會亂碼了…

ps.不過要多加注意,加上了MultiViews,記得要把AddDefaultCharset拿掉…還有,加上在MultiViews有可能會在rewrite上有問題,這都要多加注意

沒有留言: