apache虚拟主机搭建以及cgi程序的运行

来源:互联网 发布:什么是面向接口编程 编辑:程序博客网 时间:2024/05/21 10:23


apache2 下架设虚拟主机。首先在/etc/apache2/sites-available/下复制default文件,并取名为你所想要的站点名(如:mywebsite),复制好后,用编辑器打开修改里面的内容:修改服务器名ServerName www.love.com (如果没有ServerName就在<VirtualHost *:80>下一行加上就行了,一定要加)修改后就可用域名来访问你的网站了,而不再需要输入localhost/ try.html ,就直接用www.love.com/try.html,这样看起来比较正式。然后修改根目录:DocumetRoot /home/web (这个修改是自愿的,不改也可以,就是以后需要把你写的网页什么的都要放到默认目录下,一般(/var/www/)), 在往下看:

    有一个 ScriptAlias/cgi-bin/  /usr/lib/cgi-bin/   <Director “/usr/lib/cgi-bin”> 这个cgi-bin/目录是用来存放你的cgi程序的(CGI(Common Gateway Interface)是HTTP服务器与你的或其它机器 上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。通俗的来讲就是,如果有一个cgi 程序的运行结果可在网页上显示,而cgi应用程序可以由大多数的编程语言编写,如Perl(Practical Extraction and Report Language)、C\C++、Java 和Visual Basic等),你也可更改其他目录,但上面两个蓝色路径都要更改,因此可改为如:”/home/web/cgi-bin/”

    然后退出保存, 在终端输入: sudo a2ensite mywebsite,启动myewbsite网站,(如何不想启动输入:sudo a2dissite mywebsite)这样就会把你的站点配置映射到/sites-enabled/ . 之后执行: sudo gedit /etc/hosts  在服务器默认分配的本机ip(一般127.0.0.1)下面,添加另一ip(127.0.0.2/127.0.3等本机保留ip都行,也可以是你本机真实ip),并在后对应写上你刚申请的虚拟域名www.love.com。修改之后就是重启apache服务器了:sudo service apache2 restart,到此你的apache虚拟主机就建好了。
    下面就是用c写的一个text.c程序:
        int main(int argc, char *argv[])
    {   
          char *web_str;  
        /*程序会把后面的  此行通过标准输出将字符串Contenttype:text/html;charset=utf-8\n\n传送给Web服务器。它是一个MINE头信息,它告诉Web服务器随后的输出是以网页的形式。注意:这个头信息中有两个换行符,这是因为Web服务器需要在实际的文本信息开始之前先看见一个空行。*/      
       printf("Content-type: text/html;charset=utf-8\n\n");
          web_str = getenv("QUERY_STRING");//获得web表单传来的参数      

           printf("<html>");  
          printf("<head><title>welcome to c cgi.</title></head><body>");

          /*如果从表单传来的有汉字,则web_str会是以name=%十六进制数&age=%十六进制数的形式打印出来。因此,我们需要将十六进制转成十进制,再以字符串的         形式打印出来就行了。(name,age是html中的两个两个标示符)*/
          printf("你好:世界!

ser=%s”,web_str);
          printf("</body></html>");  
        return 0;
    }
写好程序后,gcc -text.c -o text.cgi;之后就将text.cig放到cgi-bin/ 目录下( 此目录下的文件权限必须为755 ,否则会出现Internal Server Error)。

    现在写一个try.html页面:
<!DOCTYPE html>
<html lang="en">  
<head>      
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />   
<meta http-equiv="Content-Language" content="zh-cn" />
  <title>你想说什么</title>   
  <meta name="viewport" content="width=320, initial-scale=1, user-scalable=0">   
  <meta name="keywords" content="">   
  <style type="text/css">   
    body {         padding-top: 40px;       }   
    .text-center {         text-align: center;       }  
     .form-youthink {         margin: 0 auto;         max-width: 300px;       }   
    .input-youthink {         margin: 0 0 10px 0;         width: 100%;         min-height: 30px;    }  
   </style> 
  </head>   
<body>    
<form class="form-youthink" action="/cgi-bin/text.cgi" method="get">     
   <h2 class="text-center">你想说什么</h2>     
  <input class="input-youthink" type="text" name="name" placeholder="name">
    
   <input class="input-youthink" type="text" name="age" placeholder="age">
    
   <input class="input-youthink" type="submit" value="原来如此">    
</form>  
</body>
</html>
    现将try.html放在和cgi-bin 同一目录下(注意:不是放到cgi-bin目录下),在浏览器中输入www.love.com/try.html 就能看见try.html页面,在输入类容之后,页面跳转并打印你text.c中的printf中的内容(注意看,跳转后的页面所打印的字符中是否有上面红色的字符变量,那是肯定有的,所以在解析汉字时,就要去掉前面的这两个变量名)。




原创粉丝点击