iT邦幫忙

0

在網頁端無法執行CGI程式

各位好,

我在ubuntu上安裝了apach2,
接著到 /etc/apache2/mods-available/mime.conf
把AddHandler cgi-script .cgi 加入

我不知道我的cgi檔案要放在哪??
大部份都說會產生在/var/www/cgi-bin
但我的沒有cgi-bin, 到是在有個資料夾 -> /usr/ilb/cgi-bin

因為我把我的cgi程式放到任何一個資料夾下,如/var/www or /usr/lib/cgi-bin
都會顯示錯誤,如下
『Forbidden
You don't have permission to access /test.cgi on this server.
Apache/2.2.22 (Ubuntu) Server at 192.168.0.21 Port 80』

但如在os上下指令 ./test.cgi 是可以執行的。
我試過開啟192.168.0.21/1.cgi 2.cgi 等等
只要是cgi結尾的檔都會這樣,即使沒有這個檔案!!

請各位大家指教

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

6
weiclin
iT邦高手 4 級 ‧ 2014-01-13 13:00:38
最佳解答

這是 apache 安裝好以後的 default 設定:

<pre class="c" name="code">
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

意思是建立一個別名, 將 /cgi-bin/ 指到 /usr/lib/cgi-bin/
換句話說, 你如果有一個 cgi 放在 /usr/lib/cgi-bin/hi.cgi
那麼你要這樣子去存取: http://server.ip/cgi-bin/hi.cgi

如果你希望在 cgi-bin 以外的地方執行 cgi, 有兩件事要做

  1. 在 apache 設定檔裡面增加一行: AddHandler cgi-script .cgi
  2. 在你網站設定檔的 <Directory> 區塊裡面找到 Options, 增加一個項目允許執行 cgi : +ExecCGI
    這樣子, 你如果有個 /var/www/test.cgi
    就可以經由 http://server.ip/test.cgi 去存取
看更多先前的回應...收起先前的回應...
moreallen iT邦新手 5 級 ‧ 2014-01-13 13:21:27 檢舉

感謝您快速的回覆,
以下幾個問題,再次請教您:

  1. ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    這行須要去哪設定?
    是apach2.conf 還是mods-available 裡的目錄?

2.為什麼我執行cgi程式行是顯示無權限,而不是找不到這個檔案??

謝謝

fillano iT邦超人 1 級 ‧ 2014-01-13 14:04:00 檢舉

看一下httpd是用哪個user在跑,然後把程式的owner改成那個user看看。

weiclin iT邦高手 4 級 ‧ 2014-01-13 14:23:47 檢舉
  1. ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    這行須要去哪設定?
    ans: 預設就有了, 在 /etc/apache2/sites-available/default

  2. 為什麼我執行cgi程式行是顯示無權限,而不是找不到這個檔案??
    ans: 你options裡沒有這個: +ExecCGI, 所以 apache 光是看到 .cgi 就說你沒有權限先擋下來了, 如果這個目錄允許你執行 cgi, apache 才會去檢查檔案是否存在

如果你覺得網址裡有個 cgi-bin 可以接受, 那你就直接丟 /usr/lib/cgi-bin/
然後由 http://server.ip/cgi-bin/ 去存取就好了, 什麼設定都不用動

moreallen iT邦新手 5 級 ‧ 2014-01-14 12:00:03 檢舉

weiclin,

我已可以在http://server.ip/cgi-bin/ 存取了 非常謝謝你!!

但有另一個問題,在/var/www 下 還是無法存取 cgi程式,

  1. 『AddHandler cgi-script .cgi』 這行是加在哪個檔案?
    我是加在/etc/apache2/mods-available/mime.conf
    2.
    設定檔如上

謝謝

weiclin iT邦高手 4 級 ‧ 2014-01-14 13:22:35 檢舉

加在 mime.conf 是 ok 的~

你現在要做的, 有看到 <Directory /var/www> 下面那行 Options 吧?
在最後面加上 +ExecCGI 這個項目, 就像底下的 cgi-bin 的 options 那樣

我要發表回答

立即登入回答