没啥意思的站点

Bash其实也可以做CGI用

标题其实是“废话”。因为,其实稍微熟悉web原理的都知道,理论上,所有可执行的程序/脚本,都可以被server程序(例如apache/mini_httpd/lighttpd/nginx等)调用,只要能够输出HTML,都可以成功。
而这个用bash做CGI的想法,纯属闲着无聊的时候,瞎想出来的。不过有这个想法的,我肯定不是第一人,这里这里都有类似的描述。
不过,我这个Web From Scratch的过程还颇有点波折,试了蛮久才成功,就在此记录一下。
其实,说白了都是也就一句话:扩展名不能随意取。当然这个只是针对我这个主机的apache来说的,其他的server可能有其他的规则,暂且不做定论。
之前我一直把我的脚本文件名写成index.sh,结果怎么试都不行,后来无意中改成inedx.py(虽然里面还是#!/bin/bash开头的)居然就可以了,于是我就找到原因了,现在我改成个更通用的index.cgi了,哈哈。
另外关于.htaccess,由于自己也是一知半解,就不讨论了,有兴趣的话,可以看看这里,这里只贴下我用到的代码,可以把对此域名的任何路径的请求都让index.cgi来处理。

RewriteEngine on
DirectoryIndex index.cgi
RewriteCond %{REQUEST_URI} !(index.cgi)
RewriteRule ^(.*)$ index.cgi/$1 [L]

来看看我的bash,就是简单地输出服务器信息:

#!/bin/bash
 
#下面这两行头一定要有,不然可是会引发 500 Internal Server Error 错误的。
echo "Content-type: text/html"
echo ""
 
echo "<h1>Bash CGI works!</h1>"
env | while read line;do
	echo "<b>"
	echo "$line" | cut -d= -f 1
	echo "</b>=<i>"
	echo "$line" | cut -d= -f 2-
	echo "</i><br>"
done

最近几天,可以点击 http://hzlug.org/abc?xxx=yyy 观察这个脚本运行的效果,以后可以把这个地址做它用,嘿嘿。
可以看到 REDIRECT_URL 和 QUERY_STRING 这两个环境变量分别是路径和参数,这样理论上就可以用一个脚本来完成很复杂的功能了~
至于HZLUG到底会做成什么样子,还请大家多多提意见哦~

18 评论

  1. 囧…这个还是要有apache啊…
    今天在用php实现web server的功能…折腾死我了…

  2. bash 也可以做 web server 的呀,
    用 nc 监听就可以了

  3. 见本id链接。。。。

  4. 曾经看到有人用bash+rrdtool做了个日志分析站点

  5. 骨头—bash高手

  6. 骨头啊!你太牛了!
    hzlug的重任,还是交给你了!

  7. 不错,我以后写 cgi 就用 bash 写了,那些个什么 php,python 阿 ruby 呀啥的都搞不懂,就 bash 还玩得转,哈哈

  8. 不过是不是有隐患呢,这个可以执行系统命令阿?

  9. 我曾经用MASM写过一个WEB服务器,用dll作CGI,非常爽~

  10. apache 加上 AddHandler cgi-script .sh 就可以使用这个扩展名了
    另外,我一般都是把 bash 写的 cgi 丢到 ScritpAlias 指定的目录里面,不管你啥扩展名,我一般连扩展名都省了。
    GET 方法的参数什么的从 PATH_INFO 里面读,这样就有个友好的 URI,不用再看到问号了
    结合 mysql 命令行,和数据库的交互也不成问题, 管道串起来特别方便:-)

  11. 骨头,知道 bash cgi 怎么上传文件不?搜了好久没有找到,只好用 python cgi 了 =_=!

发表评论