近日受老板的委托,將公司的.com域名也注冊(cè)了下來。由于目前公司.cn網(wǎng)站在國(guó)內(nèi)存在被重新備案的不確定性,所以沒有將.com域名也解析到國(guó)內(nèi)新網(wǎng)的.cn空間。作為過渡的方案,我在godaddy購(gòu)買了三個(gè)月的空間,準(zhǔn)備將公司網(wǎng)站放到國(guó)外去,一則免去了備案的繁瑣手續(xù),二則國(guó)外的空間普遍比國(guó)內(nèi)要低廉。
對(duì)于國(guó)外的HOSTING空間,我接觸還比較少,自己的博客是放在linode的VPS,本來一開始是打算將公司的網(wǎng)站也放到VPS里面的,但是后來由于存在太多的技術(shù)問題一時(shí)半會(huì)解決不了|,所以放棄了這個(gè)想法。
目前將原來存放于國(guó)內(nèi)新網(wǎng)空間的asp的網(wǎng)站原封不動(dòng)地轉(zhuǎn)移到國(guó)外vps中去存在如下的問題:
1.asp網(wǎng)站是基于windows操作系統(tǒng)的,而VPS大多是開源免費(fèi)的linux操作系統(tǒng),移植性存在不確定性。
2.windows下的網(wǎng)頁(yè)服務(wù)器是IIS,而我目前VPS所使用的網(wǎng)頁(yè)服務(wù)器是nginx,兼容性欠佳。
3.公司的網(wǎng)站是微軟的asp框架,而VPS目前使用的免費(fèi)且強(qiáng)大的php框架,如果不通過第三方插件,根本無法兼容。
4.asp網(wǎng)站所使用的數(shù)據(jù)庫(kù)也是微軟的access數(shù)據(jù)庫(kù),而VPS是基于LNMP架構(gòu)的,也就是說使用的免費(fèi)開源的mysql數(shù)據(jù)庫(kù),根本無法移植。
基于以上的緣由考慮,最后還是決定在這些問題都無法完美解決之前找一個(gè)應(yīng)急方案最靠譜,這個(gè)應(yīng)急方案就是使用godaddy提供的相對(duì)便宜的hosting空間,每個(gè)月的費(fèi)用5美金不到,作為實(shí)驗(yàn)性的方案還是可以接受的。
下面就談?wù)劚敬卧趯⒐揪W(wǎng)站上傳到godaddy空間的過程中所碰到的問題以及解決這些問題的辦法。
問題一:網(wǎng)站內(nèi)的中文頁(yè)面全部變成亂碼
其實(shí)這個(gè)問題的原因不難解釋,雖然國(guó)內(nèi)新網(wǎng)的空間和在godaddy購(gòu)買的空間都是windows操作系統(tǒng)的,但是兩者還是有區(qū)別的。新網(wǎng)購(gòu)買的空間windows操作系統(tǒng)是簡(jiǎn)體中文版的,而在godaddy購(gòu)買的空間則是純英文版的。編碼的不同是直接導(dǎo)致中文網(wǎng)頁(yè)出現(xiàn)亂碼的主要原因。
解決的辦法:在每個(gè)網(wǎng)頁(yè)文件前面都加上
<% @language=vbscript codepage=936%>
這個(gè)辦法是網(wǎng)上流傳最廣的解決godaddy空間中文亂碼的辦法。雖然有用,但是如果對(duì)于網(wǎng)頁(yè)文件數(shù)量龐大的站長(zhǎng)來說,這個(gè)辦法并不聰明——不過話說回來,網(wǎng)站的轉(zhuǎn)移從來都是一件苦差事,費(fèi)時(shí)間又費(fèi)腦力。去年年底博主在給微服私訪轉(zhuǎn)移VPS的時(shí)候就為此折騰了大約一個(gè)星期。原理雖然簡(jiǎn)單,但是不確定性的東西太多,而且問題不是赤裸裸地一次性全部擺在你的面前,它可能今天出點(diǎn)狀況,明天出點(diǎn)狀況,所以費(fèi)周折是少不了的事情了。往往這個(gè)時(shí)候理論知識(shí)并不是最重要的,實(shí)際的操作經(jīng)驗(yàn)才是王道。
問題二:部分網(wǎng)頁(yè)打開存在”500(internal server)error”錯(cuò)誤
當(dāng)然,出現(xiàn)這個(gè)錯(cuò)誤的原因有太多了,比如網(wǎng)頁(yè)不存在、數(shù)據(jù)庫(kù)無法訪問、路徑錯(cuò)誤等等,要找出這個(gè)錯(cuò)誤背后的原因也著實(shí)費(fèi)了我一番周折。最開始的辦法就是瞎猜,憑著之前的經(jīng)驗(yàn)猜測(cè)導(dǎo)致錯(cuò)誤出現(xiàn)的原因。因?yàn)橹霸谧?ldquo;微服私訪”和另外一個(gè)論壇的時(shí)候也曾經(jīng)碰到過類似的情況,所以我想這個(gè)錯(cuò)誤的原因很可能還和之前一樣是由于網(wǎng)頁(yè)文件的權(quán)限導(dǎo)致的。
在網(wǎng)上搜索這個(gè)錯(cuò)誤,很多都說是godaddy的root讀寫權(quán)限沒有放開。但是通過進(jìn)入godaddy的FTP File Manager 才發(fā)現(xiàn)godaddy的root文件夾根本無法進(jìn)行permissions用戶自定義授權(quán)。當(dāng)時(shí)心里頭就咯噔了一下——難道就止步于此了?問題出在root權(quán)限上,而死扣死扣的godaddy又沒有對(duì)root放權(quán)。但是隨即又否定了自己這樣的想法,因?yàn)橄氲绞褂胓odaddy空間的人全世界那么多,碰到類似問題的也肯定大有人在,若都這樣無解的話,godaddy不早就關(guān)門大吉了?。?/p>
幸好在束手無策的時(shí)候,在網(wǎng)上找到了一篇介紹web.config文件的文章,web.config文件其實(shí)只有如下的幾行小代碼:
<?xml version="1.0"?>
<configuration>
<system.webServer>
<httpErrors errorMode="Detailed" />
<asp scriptErrorSentToBrowser="true"/><!–這句是針對(duì)Asp網(wǎng)站輸出詳細(xì)錯(cuò)誤信息的(前提是你的IE打開了顯示詳細(xì)錯(cuò)誤信息功能)–>
</system.webServer>
</configuration>
這個(gè)文件寫好之后放在網(wǎng)站的根目錄,它的作用是將網(wǎng)頁(yè)出現(xiàn)錯(cuò)誤時(shí)出現(xiàn)的500(internal server)Error頁(yè)面轉(zhuǎn)向一個(gè)顯示問題原因的頁(yè)面,雖然godaddy的500頁(yè)面夠黑色幽默,但是對(duì)于解決問題無任何參考價(jià)值,在使用web.config之后顯示的錯(cuò)誤頁(yè)面雖然沒有500頁(yè)面那么“生動(dòng)”,卻能實(shí)實(shí)在在得將所遇到的問題顯示出來,給解決問題提供至關(guān)重要的參考。
如下是我在上傳了web.config頁(yè)面之后取代500頁(yè)面的頁(yè)面內(nèi)容:
Microsoft JET Database Engine error '80040e09'
Cannot update. Database or object is read-only.
D:HOSTING9418427HTMLCN../inc/news2_inc.asp, line 13
這個(gè)已經(jīng)很直觀了,它給出的錯(cuò)誤出現(xiàn)的原因是不能更新數(shù)據(jù)庫(kù)或者是對(duì)象屬性為“只讀”。這個(gè)錯(cuò)誤提示我們很可能和root的權(quán)限沒有什么關(guān)系,至少?zèng)]有直接的關(guān)系。如果將數(shù)據(jù)庫(kù)文件的屬性設(shè)置為read and write 會(huì)怎樣呢?
事實(shí)證明我想的是正確的,在將數(shù)據(jù)庫(kù)所在的文件夾屬性設(shè)置為“寫讀”之后,錯(cuò)誤頁(yè)面消失了,網(wǎng)頁(yè)可以正常打開了!如下是godaddy進(jìn)行root文件夾以外的文件夾讀寫權(quán)限設(shè)置的步驟:
后記:以上的兩個(gè)問題已經(jīng)得到了解決,不過還有很多新的問題在出現(xiàn)。——我曾經(jīng)在前面的博文中說過,出現(xiàn)問題不是壞事而是好事,只有不斷地碰到問題,一個(gè)人才會(huì)進(jìn)步,知識(shí)也只有在不斷地解決問題中才能得到鞏固和積累!