我在一个Apache服务器上有一个页面site.shtml ,其中我想包含几个CGI脚本,如下所示: <p><pre><!–#include virtual="files/testfile" –></pre></p> <p><pre><!–#include virtual="cgi-bin/randhtml.cgi"–></pre></p> <p><pre><!–#include virtual="cgi-bin/echo.cgi" –></pre></p> <p><pre><!–#include virtual="echo.cgi" –></pre></p> <p><pre><!–#include virtual="cgi-bin/echo.cgi?test" –></pre></p> 在这种情况下, files/testfile是一个文本文件, cgi-bin/randhtml.cgi是一个预先安装的CGI可执行文件, echo.cgi两个实例都是脚本: #!/bin/sh echo $0; echo $*; 所有脚本的权限设置为755,并可以从shell执行,其行为如预期(随机输出或回显参数)。 当我尝试加载网页,文件和随机脚本正确执行,我得到了预期的输出。 回声脚本不是,我在页面中得到了一些错误: This is a test text file. random An error occurred while loading this page. An error occurred while loading this page. An error occurred while loading this […]
我有一个名为test.html文件中的以下服务器端包括… <!–#include virtual="/cgi-bin/myScript.cgi"–> <!–#include virtual="/includes/myFile.html"–> 当我在我的浏览器中查看test.html , myFile.html正被插入/呈现,但是myScript.cgi正在给我 [在执行此命令时出现的错误] 从浏览器地址栏,/ /cgi-bin/myScript.cgi渲染输出就好了,certificate文件存在于path中,权限是正确的(755)。 包含myFile.html就可以正确设置SSI处理程序,certificate正在分析页面。 所以,如果SSI正在工作,而myScript.cgi正在工作,为什么不包含#include virtual脚本? 作为一个侧面说明,这是一个cPanel托pipe帐户,我有许多其他帐户(网站)在同一个托pipe公司的服务器具有相同的configuration。 其他人都按预期工作。 cPanel版本:11.30.6(build 3) Apache版本:2.2.17 架构:x86_64 操作系统:linux Perl版本:5.8.8 内核版本:2.6.18-194.32.1.el5 cPanel Pro:1.0(RC1) 该脚本只是将当天的年份作为格式化文本返回。 输出前面是Content-type: text/html\n\n ,它不是一个新的Perl脚本。 它正在其他帐户上工作。
我正在使用Suexec运行Apache服务器。 但是,如果我尝试执行可写组的CGI脚本(如果我chmod gw,脚本运行良好),则会出现内部服务器错误。 但是,我希望该文件是可写组的。 SuPHP有一个configuration选项,允许我这样做,但是我找不到Suexec的类似选项。 我如何运行g + w的CGI脚本?
我最近在运行AmazonLinux的EC2实例上安装了Nagios(根据我的理解,这基本上是SuSe)。 我使用lighttpd和mod_cgi来为Web界面提供服务。 当我导航到一个页面,而不是得到实际的内容,我得到这个: Nagios Core 3.3.1 版权所有(c)2009-2011 Nagios核心开发团队和社区贡献者 Copyright(c)1999-2009 Ethan Galstad 最后修改date:07-25-2011 许可证:GPL 网站:http://www.nagios.org 用法:/ usr / sbin / nagios [options] 选项: -v,–verify-configvalidation所有configuration数据 -s,–test-scheduling显示预计/推荐的检查计划和其他 基于当前configuration文件的诊断信息。 -x,–dont-verify-paths不检查圆形对象path – 使用注意! -p,–precache-objects Precache对象configuration – 与-v或-s选项一起使用 -u,–use-precached-objects使用预先存储的对象configuration文件 -d,–daemon以守护进程模式启动Nagios,而不是作为前台进程 请访问Nagios网站http://www.nagios.org/查看是否有bug修复 发布,在线文档,常见问题,订阅信息 邮件列表和Nagios的商业支持选项。 这似乎是命令行版本的帮助文档。 这里是我的lighttpd.conf的相关位: alias.url = ( "/nagios/cgi-bin" => "/usr/sbin/nagios", "/nagios" => "/usr/share/nagios/html" ) $HTTP["url"] =~ "^/nagios/cgi-bin" { cgi.assign = […]
我正在运行Debian 6.0.3 ( squeeze ), nginx-0.7.67 , fcgiwrap-1.0-1+squeeze1 。 这里是testing脚本: #!/usr/bin/perl use 5.010; use warnings; use strict; use Data::Dumper; print "Content-Type: text/html\n\n"; say Dumper {map {$_ => $ENV{$_}} 'SCRIPT_NAME', 'DOCUMENT_ROOT', 'WHATEVER'}; say "$<, $>, $(, $)"; 这里是nginxconfiguration: server { server_name domain.com; root /home/yuri/6; access_log /var/log/nginx/domain.com-access.log; error_log /var/log/nginx/domain.com-error.log; location /cgi-bin/ { fastcgi_pass unix:/var/run/fcgiwrap.socket; fastcgi_param DOCUMENT_ROOT $document_root; […]
我正在运行tomcatserver,我需要执行一个Perl脚本。 我在网上search,发现我需要在conf / web.xml中取消注释 <servlet> <servlet-name>cgi</servlet-name> <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>6</param-value> </init-param> <init-param> <param-name>cgiPathPrefix</param-name> <param-value>WEB-INF/cgi</param-value> </init-param> <load-on-startup>5</load-on-startup> </servlet> 我这样做,并重新启动服务器。 现在我无法连接到服务器。 我经历了很多如何上网,终于find了这个tomcat的cgi 。 我无法到达服务器。 它显示一个空白页面。 时间紧迫。
我正在做一个Apache的可移植安装来运行Bugzilla。 这个安装有一个Perl的可移植版本,这是我想mod_cgi使用的一个。 但是,mod_cgi没有任何方式来configuration预期的二进制文件(或每个文件types的二进制文件),所以它依赖于shebang来知道要执行什么。 我的问题是这样的:Bugzilla的perl文件有一个指向#!/usr/bin/perl -T的shebang,因为我在Windows上(不幸的是没有任何事情可以做到) ,我想使用特定的Perl发行版对于服务器,我需要修改shebang。 我知道我可以事先运行一个Perl脚本,只是用指向正确的二进制文件replace所有的shebang,但我更喜欢一个更强大的解决scheme。 我想到filter和mod_lua,但Apache和它的模块似乎没有钩子或指令,允许在发送到cgi进程之前处理文件。 他们只能处理客户端发送的请求或最终的输出,然后再发送回客户端。 在发送到cgi进程之前,有没有办法使用Apache或模块处理文件? 有没有办法让cgi进程认为我的目标perl实际上在/usr/bin/perl ?
我的.htaccess文件在我的网站的根目录中,我缩小了问题的单行代码RewriteEngine on 。 我怎么知道这是这段代码? 因为我把除了RewriteEngine on之外的整个.htaccess文件作为一个testing删除了……而我的CGI应用程序仍然崩溃。 如果任何人有任何想法,为什么RewriteEngine on在线决定自行打破CGI应用程序,我很乐意听到! PS – 万一你有兴趣,我想要工作的一段代码是帮助将所有域合并到一个域中(换行符只是为了便于阅读): RewriteEngine on RewriteCond %{HTTP_HOST} ^example.com$ [NC] RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301] RewriteCond %{THE_REQUEST} ^[AZ]{3,9}\ /index\.html RewriteRule (.*) http://www.example.com/ [R=301,L]
我的设置如下:我有一个运行不同虚拟主机的Apache2networking服务器,一个虚拟主机用于生产网站,另一个虚拟主机用于登台/预览系统。 这两个虚拟主机有不同的DocumentRoot和不同的(Perl)CGI文件夹。 每个虚拟主机使用的模块应该在不同的目录中,所以我做了以下几点: <VirtualHost…> ServerName production SetEnv PERL5LIB /home/production/modules </VirtualHost> <VirtualHost…> ServerName staging SetEnv PERL5LIB /home/staging/modules </VirtualHost> 不过,我只注意到,在我的Perl CGI脚本中,两条path都被填充到我的@INC中,所以我不能将生产模块与生产模块分开,例如SetEnv指令不仅限于单个虚拟主机,而且似乎全球工作。 我该如何解决这个问题? 谢谢! 乔纳斯
我正在学习制作一个CGI程序。 现在我可以打印我想要的文字。 但是,我怎样才能从CGI程序获得GET或POSTinput? (如查询string或后身)