Cgi won't run when there's no internet

I am doing a web redirect by creating a redirect cgi using a lighttpd server.
Once your internet network is connected, connect wifi and it will run index.cgi and redirect you to the page you want.

However, if you're connected to Wi-Fi and still can't use the Internet, the connection isn't the only redirect page.

< lighttpd.conf >

# lighttpd configuration file
# 
## modules to load
# all other module should only be loaded if really neccesary
# - saves some time
# - saves memory
server.modules = ( 
    "mod_rewrite", 
#    "mod_redirect", 
    "mod_alias", 
    "mod_auth", 
    "mod_status", 
#    "mod_setenv",
#    "mod_fastcgi",
#    "mod_proxy",
#    "mod_simple_vhost",
    "mod_cgi",
    "mod_ssi",
#    "mod_usertrack",
#    "mod_expire",
    "mod_webdav" 
)

# force use of the "write" backend (closes: #2401)
server.network-backend = "write" 

## a static document-root, for virtual-hosting take look at the 
## server.virtual-* options
server.document-root = "/etc/MAP7000_Web/www/" 

## where to send error-messages to
#server.errorlog = "/var/log/lighttpd/error.log" 

## files to check for if .../ is requested
index-file.names = ( "index.shtml", "default.html", "index.htm", "default.htm","cgi-bin/index.cgi" )

## mimetype mapping
mimetype.assign = (  
    ".pdf"   => "application/pdf",
    ".class" => "application/octet-stream",
    ".pac"   => "application/x-ns-proxy-autoconfig",
    ".swf"   => "application/x-shockwave-flash",
    ".wav"   => "audio/x-wav",
    ".gif"   => "image/gif",
    ".jpg"   => "image/jpeg",
    ".jpeg"  => "image/jpeg",
    ".png"   => "image/png",
    ".svg"   => "image/svg+xml",
    ".css"   => "text/css",
    ".html"  => "text/html",
    ".htm"   => "text/html",
    ".js"    => "text/javascript",
    ".txt"   => "text/plain",
    ".dtd"   => "text/xml",
    ".xml"   => "text/xml" 
 )

## Use the "Content-Type" extended attribute to obtain mime type if possible
#mimetypes.use-xattr = "enable" 

## send a different Server: header
## be nice and keep it at lighttpd
#server.tag = "lighttpd" 

$HTTP["url"] =~ "\.pdf$" {
    server.range-requests = "disable" 
}

##
# which extensions should not be handle via static-file transfer
#
# .php, .pl, .fcgi are most often handled by mod_fastcgi or mod_cgi
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )

######### Options that are good to be but not neccesary to be changed #######

## bind to port (default: 80)
#server.port = 81

## bind to localhost (default: all interfaces)
#server.bind = "localhost" 

## error-handler for status 404
server.error-handler-404 = "/cgi-bin/index.cgi" 
#server.error-handler-404 = "/error-handler.php" 

## to help the rc.scripts
server.pid-file = "/var/run/lighttpd.pid" 

###### virtual hosts
##
##   If you want name-based virtual hosting add the next three settings and load
##   mod_simple_vhost
##
## document-root =
##   virtual-server-root + virtual-server-default-host + virtual-server-docroot or
##   virtual-server-root + http-host + virtual-server-docroot
##
#simple-vhost.server-root = "/home/weigon/wwwroot/servers/" 
#simple-vhost.default-host = "grisu.home.kneschke.de" 
#simple-vhost.document-root = "/pages/" 

## 
## Format: <errorfile-prefix><status>.html
## -> ..../status-404.html for 'File not found'
#server.errorfile-prefix = "/www/error-" 

## virtual directory listings
#server.dir-listing = "enable" 

## send unhandled HTTP-header headers to error-log
#debug.dump-unknown-headers = "enable" 

### only root can use these options
#
# chroot() to directory (default: no chroot() )
#server.chroot = "/" 

## change uid to <uid> (default: don't care)
#server.username = "nobody" 
#
server.upload-dirs = ( "/tmp" )

## change uid to <uid> (default: don't care)
#server.groupname = "nobody" 

#### compress module
#compress.cache-dir          = "/dev/null/" 
#compress.filetype           = ("text/plain", "text/html")

#### proxy module
## read proxy.txt for more info
#proxy.server = (
#    ".php" => (
#        "localhost" => (
#            "host" => "192.168.0.101",
#            "port" => 80
#        )
#    )
#)

#### fastcgi module
## read fastcgi.txt for more info
#fastcgi.server = (
#    ".php" => (
#        "localhost" => (
#            "socket" => "/tmp/php-fastcgi.socket",
#            "bin-path" => "/usr/local/bin/php" 
#        )
#    )
#)

#### CGI module
cgi.assign = ( ".pl"  => "/usr/bin/perl", ".cgi" => "", ".sh" => "" )

#### SSL engine
#ssl.engine = "enable" 
#ssl.pemfile = "server.pem" 

#### status module
#status.status-url = "/server-status" 
#status.config-url = "/server-config" 

#### auth module
## read authentification.txt for more info
#auth.backend = "plain" 
#auth.backend.plain.userfile = "lighttpd.user" 
#auth.backend.plain.groupfile = "lighttpd.group" 
#auth.require = (
#    "/server-status" => ( 
#        "method"  => "digest",
#        "realm"   => "download archiv",
#        "require" => "group=www|user=jan|host=192.168.2.10" 
#    ),
#    "/server-info" => ( 
#        "method"  => "digest",
#        "realm"   => "download archiv",
#        "require" => "group=www|user=jan|host=192.168.2.10" 
#    )
#)

#### url handling modules (rewrite, redirect, access)
#url.rewrite = ( "^/$" => "/server-status" )
#url.redirect = ( "^/wishlist/(.+)" => "http://www.123.org/$1" )

#### both rewrite/redirect support back reference to regex conditional using %n
#$HTTP["host"] =~ "^www\.(.*)" {
#    url.redirect = ( "^/(.*)" => "http://%1/$1" )
#}

#### expire module
#expire.url = ( "/buggy/" => "access 2 hours", "/asdhas/" => "access plus 1 seconds 2 minutes")

#### ssi
ssi.extension = ( ".shtml" )

#### setenv
#setenv.add-request-header  = ( "TRAV_ENV" => "mysql://user@host/db" )
#setenv.add-response-header = ( "X-Secret-Message" => "42" )

#### variable usage:
## variable name without "." is auto prefixed by "var." and becomes "var.bar" 
#bar = 1
#var.mystring = "foo" 

## integer add
#bar += 1
## string concat, with integer cast as string, result: "www.foo1.com" 
#server.name = "www." + mystring + var.bar + ".com" 
## array merge
#index-file.names = (foo + ".php") + index-file.names
#index-file.names += (foo + ".php")

#### include
#include /etc/lighttpd/lighttpd-inc.conf
## same as above if you run: "lighttpd -f /etc/lighttpd/lighttpd.conf" 
#include "lighttpd-inc.conf" 

#### include_shell
#include_shell "echo var.a=1" 
## the above is same as:
#var.a=1

#### webdav
#$HTTP["url"] =~ "^/webdav($|/)" {
webdav.activate = "enable" 
webdav.is-readonly = "disable" 
# webdav.sqlite-db-name = "/var/run/lighttpd-webdav-lock.db" 
#}

< index.cgi >

int main(void) {
    unsigned char my_ip[4];
    char temp[64];
    char cmd[256];
    char test[256];
    int k;
    FILE *fp;

    //k=get_IP_from_system(my_ip,1);
    //sprintf(temp, "%d.%d.%d.%d", my_ip[0],my_ip[1],my_ip[2],my_ip[3]);    
//        printf("Status: 302 Moved\r\n");
//        printf("Cache-control: no-store\r\n");
//        printf("Connection: close\r\n");
    //if(k!=0)
    //{
        printf("Location: %s\r\n\r\n", "http://192.168.1.254/main2.html");
    //}
    //else
    //{
    //    sprintf(cmd, "http://%s/main.html", temp);
    //    printf("Location: %s\r\n\r\n", cmd);
//    }

    return 0;
} ```

I suspect you need some type of runnable file here as a cgi. Either a script or compiled code. It seems that you're trying to use "raw" C code in there. Maybe something in lua?

1 Like

Plus, you do not need to run any CGI at all to do a redirect on HTML.

1 Like

If I don't need cgi for redirection, should I configure it in lighttpd.conf?

index-file.name in lighttpd.conf is configured as html instead of cgi in this part.

You do not need to configure anything to de HTML redirection. Just create an index.html file with the proper headers, and use it as a landing page.

1 Like