最近我在研究web、cgi,比较好奇cgi这玩意,就在Ubuntu上下载安装了Apache(2.2版本),并写个简单的html文件 test.html 和相关的cgi文件 t.cgi。
Apache的安装路径为默认路径:/usr/local/apache2。经过对Apache初步简单粗暴的学习,将 test.html 放在了/user/local/apache2/htdocs/ 下,将 t.cgi 放在了 /user/local/apache2/cgi-bin/ 下。
在浏览器上访问 test.html ,在对话框中输入数据,点击提交按钮后,但老出现错误,要么是找不到cgi文件,要么找到了cgi文件却不是执行而是询问是否下载或是直接显示文件代码。
又是一番网上查资料。
网上的回答是:
1、更改 /user/local/apache2/conf/ 下的httpd.conf配置文件(这个文件是关于web服务的配置文件),里面有一个关于 /user/local/apache2/cgi-bin/
项的配置。添加可执行的cgi文件类型,比如:.cgi .sh .pl 等,另外,在Options选项上增加ExecCGI。
2、更改cgi文件权限为777。
我也是一切照做了,但弄来弄去问题依旧,郁闷呐!
通过将近一天的倒腾,终于黄天不负有心人!
首先,我写了一个简单的shell脚本test.sh,放在了/user/local/apache2/cgi-bin/下,并在浏览器输入/user/local/apache2/cgi-bin/test.sh后,会出现询问是否下载或是直接显示文件代码。做法:
1:浏览器上路径改为/localhost/cgi-bin/test.sh;
2:test.sh文件权限应该为755,不要搞成777那种丑陋的权限;
3:确保cgi文件如test.sh没有语法问题,在终端上可以执行。
至于网上更改httpd.conf配置文件的方法,我保持中立!因为我在没有更改http.conf配置文件的情况下,cgi文件也能在浏览器上执行得很好。至于为什么,我也不能说出来,对于httpd.conf配置文件还有待深入研究!
其次,就是在html文件中的action选项上,路径最好不要写成型如 /user/local/apache2/cgi-bin/... 这样的绝对路径,而是写成/localhost/cgi-bin/...的路径。像我的一般出现找不到cgi文件的情况,action改为后者就解决了!像一般真实客户端输入URL也是类似于后者的!
完!
若文章有不妥,望前辈们指导批评!
在研究Apache CGI时遇到问题,包括找不到CGI文件和执行错误。解决方法包括:1) 确保CGI文件在正确目录,如/usr/local/apache2/cgi-bin/,且权限为755;2) HTML表单的action路径使用/localhost/cgi-bin/...而非绝对路径;3) 配置httpd.conf文件,添加CGI文件类型及ExecCGI选项。无需更改配置文件也可成功执行CGI,但原因待深入研究。

1万+

被折叠的 条评论
为什么被折叠?



