Windows下使用Apache執行本地Python指令碼和訪問html教程
最近學習到Python的cgi程式設計,搗鼓了一番,把自己的學習經驗放出來。
一、安裝Apache2.4伺服器
你需要去官網下載。
地址:https://www.apachehaus.com/cgi-bin/download.plx或者http://www.apachelounge.com/download/。這兩個地址一般情況下都是可以的。如果第一個地址下載提示 403 Forbidden,那就換第二個地址一般沒什麼問題的。
下載ok後解壓,我的安裝解壓目錄是D:\Program Files\ApacheHttpdServer (目錄隨意請不要使用中文),使用cmd切換到Apache的bin目錄下,使用httpd -k install安裝服務。如果成功便會提示installed,如圖:
當然一般剛下載的檔案是無法安裝成功的。因為我們需要修改httpd.conf檔案。
二、修改httpd.conf檔案
進入D:\Program Files\ApacheHttpdServer\Apache24\conf資料夾下,找到httpd.conf使用好一點的文字編輯器開啟。凡是#開頭的都是註釋,所以請要麼刪除,要麼無視。
我們需要修改幾個關鍵的元素。
1.ServerRoot,這個必須是正確的目錄,它是Apache2.4的主目錄。Listen 指示伺服器的埠號,預設80,如果你的程式會佔用那就修改掉好了。我的修改方案如下:
ServerRoot "D:/Program Files/ApacheHttpdServer/Apache24" Listen 80
2.DocumentRoot,這個必須是正確的資料夾目錄,末尾不能帶/。這個目錄用來存放靜態資源頁面,我們要訪問的html檔案就放在這下面。我的修改方案如下:
DocumentRoot "D:/Program Files/ApacheHttpdServer/Apache24/htdocs"
3.<IfModule alias_module>標籤元素,其內部ScriptAlias指令規定Apache2.4訪問二進位制指令碼檔案的目錄,這個很重要,一定要修改,我的修改方案如下:
<IfModule alias_module> ScriptAlias /cgi-bin/ "D:/Program Files/ApacheHttpdServer/Apache24/cgi-bin/" </IfModule>
4.Directory標籤元素,約定指令碼檔案的訪問目錄和許可權,這個也很重要,一定要修改。我的修改方案如下:
<Directory "D:/Program Files/ApacheHttpdServer/Apache24/cgi-bin/">
AllowOverride None
Options +ExecCGI
Order allow,deny
Allow from all
Require all granted
</Directory>
注意,是Require all granted而非Require all denied,錯誤使用後者將可能導致訪問被拒絕。且Directory的目錄和ScriptAlias的目錄一致。
5.<IfModule mime_module>標籤元素,內部關鍵指令AddHandler用來預訂Apache2.4可以訪問哪些格式的指令碼檔案。因此我們要加上.py
<IfModule mime_module>
TypesConfig conf/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddHandler cgi-script .cgi .py
</IfModule>
其他沒有提到的都可以無視掉。溫馨提示,所有修改動作都是在conf檔案已有的元素上進行的覆蓋操作,你需要找到需要修改的元素然後覆蓋。請不要直接將我的方案copy後追加到conf檔案後面。
好了,如果第一步服務未安裝成功,請再次嘗試使用httpd -k install安裝服務。然後開啟ApacheMonitor.exe點選start就ok了,如果start仍然失敗請依次檢查我提到的5點看是否修改正確。
如果ok你將看到下圖,它是綠色的。
此時瀏覽器直接輸入localhost,將看到It works。代表服務啟動ok
三、編寫python檔案和html檔案
我的程式碼hello.py如下:
#!D:\Programs\Python\Python36\python.exe
#-*- coding:UTF-8 -*-
print ("Content-type:text/html")
print ()
print ('<html>')
print ('<head>')
print ('<meta charset="gb2312">')
print ('<title>Hello Word - 我的第一個 CGI 程式!</title>')
print ('</head>')
print ('<body>')
print ('<h2>Hello Word! 我是來自菜鳥教程的第一CGI程式</h2>')
print ('</body>')
print ('</html>')
注意前兩段的兩個#號可不是註釋哦,第一段#指令用來指定使用哪個python直譯器來執行指令碼(如果你還沒有安裝python那肯定跑不了的哦)。第二段指定指令碼的輸出編碼。
我的test.html檔案程式碼如下:
<html><head><meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>Hello Word - 我的第一個 CGI 程式!</title>
</head>
<body>
<h2>Hello Word! 我是來自菜鳥教程的第一CGI程式</h2>
</body>
</html>
然後將hello.py丟進cgi-bin目錄,將test.html丟進htdocs目錄。如下
然後分別輸入http://localhost/cgi-bin/hello.py 和 http://localhost/test.html將訪問成功
完結,謝謝觀看。