Apache-2.2

Apache:將 DocumentRoot 設置為 cgi 目錄會導致下載文件而不是執行文件

  • March 18, 2010

我有一個 c 編譯的 CGI 應用程序,需要從我的 Apache 伺服器的 DocumentRoot 執行。CGI 文件稱為 index.cgi,位於 /usr/lib/cgi-bin/index.cgi。

我有以下目錄定義

<Directory "/usr/lib/cgi-bin/">
   Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
   AllowOverride None
   Order allow,deny
   Allow from all
   DirectoryIndex index.cgi 
</Directory>

我有以下 VirtualHost 設置:

<VirtualHost *:80>  
   ServerAdmin webmaster@localhost
   DocumentRoot /usr/lib/cgi-bin
#   ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

   ErrorLog /var/log/apache2/error.log     
   LogLevel warn   
   CustomLog /var/log/apache2/access.log combined

</VirtualHost>

如果我轉到 127.0.0.1 或 127.0.0.1/index.cgi,系統會提示我下載 index.cgi 文件,但是如果我在 vhost 配置塊中啟用 ScriptAlias 並轉到 127.0.0.1/cgi-bin/index。 cgi 我看到了我的 CGI 應用程序的輸出。

我最初用 mod_rewrite 解決了這個問題,但是在我的測試系統上工作的目標(嵌入式)沒有可用的模組,所以我正在尋找另一條路線(再次)。

如果您不使用ScriptAlias. 在目錄部分,添加類似

AddHandler cgi-script .cgi

這就是文件所說的:

任何具有處理程序 cgi-script 的文件都將被視為 CGI 腳本,並由伺服器執行,並將其輸出返回給客戶端。文件通過具有包含由 AddHandler 指令定義的副檔名的名稱或位於 ScriptAlias 目錄中來獲取此處理程序。

引用自:https://serverfault.com/questions/123647