Rap: was brauche ich für gci?

Hallo,
ich habe unter Debian (Linux) den Apache2 installiert. Perl ist ja schon automatisch bei Linux dabei und installiert.

Auf selfhtml.org steht nur, dass ein Webserver nötig sei. Wenn ich aber ein Perlscript (.pl) im Verzeichnis cgi-bin ablege und z. B. folgendes Beispiel ausprobieren möchte:

http://de.selfhtml.org/servercgi/cgi/cgihtml.htm#wechselwirkung_html_cgi

und dann im Browser

http://localhost/cgi-bin/comments.pl

eingebe, erscheint:
________________________________________________________________________
Not Found

The requested URL /cgi-bin/comments.pl was not found on this server.
________________________________________________________________________

Ich bin mir 100%ig sicher, dass das Script im richtigen Verzeichnis liegt.

Ich kann mir vorstellen, dass mir noch etwas fehlt, um CGI-Scripts  ausführen zu können, aber was?

  1. Hallo Rap!

    http://localhost/cgi-bin/comments.pl

    eingebe, erscheint:
    ________________________________________________________________________
    Not Found

    The requested URL /cgi-bin/comments.pl was not found on this server.
    ________________________________________________________________________

    Ich bin mir 100%ig sicher, dass das Script im richtigen Verzeichnis liegt.

    Das glaube ich Dir. Zumindest in das Verzeichnis, was Du für das Richtige hälst ;)

    Nur kann es aber sein, dass es noch ein cgi-bin, der das Default-cgi-bin ist, und (vermutlich) auf der selben Ebene wie /htdocs.

    Schau zunächst mal im Verzeichnis, wo Apache installiert ist, ob es so ist.

    Ich kann mir vorstellen, dass mir noch etwas fehlt, um CGI-Scripts  ausführen zu können, aber was?

    Bei Linux (da kenne ich mich leider [noch] nicht aus), dürfte es reichen. Aber Not Found bedeutet nun mal Nicht gefunden, also ist das Skript mit Sicherheit nicht im Default-cgi-bin. Ein Skript, das vorhanden ist, aber nicht »funzt«, wird vom Apache mit einem 500er (Interal Server Error) quittiert - nicht mit 404.

    Viele Grüße aus Frankfurt/Main,
    Patrick

    --

    _ - jenseits vom delirium - _
    [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
    Nichts ist unmöglich? Doch!
    Heute schon gegökt?
    1. Hallo Patrick,

      Du hast recht.

      Es gibt tatsächlich noch ein cgi-bin Verzeichnis  unter /usr/lib. Darauf muss man erst mal kommen :-)

      Danke

      1. Hallo Rap!

        Es gibt tatsächlich noch ein cgi-bin Verzeichnis  unter /usr/lib.

        Du kannst aber mit einer ScriptAlias-Direktive es so umbiegen, dass ein anderes von Dir gewähltes cgi-bin-Verzeichnis zum Default wird:

        ScriptAlias /cgi-bin/ "E:/xampp/htdocs/cgi-bin/"

        und dann:

        "E:/xampp/cgi-bin" should be changed to whatever your ScriptAliased

        CGI directory exists, if you have that configured.

        <Directory "E:/xampp/htdocs/cgi-bin">
            AllowOverride None
            Options +ExecCGI
            Order allow,deny
            Allow from all
        </Directory>

        Die Pfade auf Linux-Pfade natürlich anpassen ;)

        Darauf muss man erst mal kommen :-)

        Jo, der Apache ist Medizinmann und somit für normale Krieger wie unsereins voller Rätsel!

        Hugh!

        Viele Grüße aus Frankfurt/Main,
        Patrick

        --

        _ - jenseits vom delirium - _
        [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
        Nichts ist unmöglich? Doch!
        Heute schon gegökt?
      2. hallo Rap,

        Es gibt tatsächlich noch ein cgi-bin Verzeichnis  unter /usr/lib. Darauf muss man erst mal kommen :-)

        Das nutzt dir für deinen Apache allerdings wenig. Dieses Verzeichnis _kann_ für dein System interessant sein, deinem Webserver ist es aber nur bei entsprechender Konfiguration zugänglich.

        Zunächst einmal: "Apache2" kann unterschiedliche Versionen bedeuten - Apache 2.0.x oder Apache 2.2.x. Du solltest schon versuchen, die genaue Apache-Version anzugeben. Obwohl das mit deinem Problem nicht wirklich etwas zu tun hat.

        Dein Apache bewahrt (unter Debian) sein Konfigurationsverzeichnis unter /etc/apache2 auf. Und die Konfigurationsdatei heißt nicht "httpd.conf", sondern "apache2.conf". In der gibt es eine Zeile (ungefähr Zeile 512), die so aussieht:
           # AddHandler cgi-script .cgi
        Diese Zeile solltest du zunächst so gestalten, daß sie so aussieht:
           AddHandler cgi-script .cgi .pl
        Damit bekommt dein Server gesagt, daß er *.pl-Dateien als CGI-Programme verarbeiten soll. Das nutzt nur erstmal noch nicht viel, da er jetzt noch wissen muß, in welchem Verzeichnis denn solche *.pl-Dateien liegen dürfen.

        Es gibt nun noch ein Verzeichnis /etc/apache2/sites-enabled, und in diesem Verzeichnis liegt die Konfigurationsdatei "000-default" für deinen "default virthost". Darin findest du, wie Patrick richtigerweise angemerkt hat, einen Script-Alias, der auf /usr/lib/cgi-bin verweist. Damit diese Zeile aber wirksam wird, mußt du berücksichtigen, daß sie von mehreren "IfModule"-Anweisungen abhängig ist und du diese Module also entweder aktivieren oder einfacherweise diese "IfModule"-Anweisungen ausblenden.

        Ich bin mir 100%ig sicher, dass das Script im richtigen Verzeichnis liegt.

        In welchem liegt es denn?

        Und btw: es ist ziemlich umständlich, was Debian da macht. Und auch nicht wirklich einzusehen. Es bleibt dir nichts anderes übrig, als dich ausführlich mit der Konfiguration deines Apache auseinanderzusetzen. Und nicht vergessen, für das Script selbst die "Rechte" korrekt zu setzen ;-)

        Grüße aus Berlin

        Christoph S.

        --
        Visitenkarte
        ss:| zu:) ls:& fo:) va:) sh:| rl:|
  2. Ich kann mir vorstellen, dass mir noch etwas fehlt, um CGI-Scripts  ausführen zu können, aber was?

    Eine Konfiguration für deinen Server.
    Das cgi Verzeichniss ist oft in einem anderen als das root Verzeichniss, wo genau das findet du in der Kopnfiguration. Ich hab aber keine Ahnung wo die http.conf unter einem Linx steckt.

    Struppi.

  3. Hallo Rap,

    du solltest dich zunächst mal unbedingt mit der Konfiguration des Apache Webservers beschäftigen. Es gibt da ein paar Handgriffe, die man beherrschen muss, bevor es mit der CGI Programmiererei losgehen kann. Du musst zum Beispiel in der Lage sein dem Apachen sagen zu können aus welchem Verzeichnis die HTML Seiten gelesen werden sollen, wenn du die URL http://localhost im Browser eingibst. Entsprechend musst du ihm auch sagen können in welchem Verzeichnis deine CGI Skripte liegen, wenn du http://localhost/cgi-bin als URL eingibst. Typischer Weise spielt sich das alles unterhalb des /srv Verzeichnisses ab. Ausserdem muss dem apachen noch klar sein, dass es Perl Skripte sind, die nicht einfach nur angezeigt, sondern erst _ausgeführt_ werden müssen. Dies alles bewerkstelligt man in der httpd.conf, der Konfigurationsdatei von Apache, welche sich typischer Weise im Verzeichnis /etc/apache2 befindet. Oft findet man dort eine bereits funktionierende und gut kommentierte httpd.conf vor, die man höchstens noch leicht anpassen muss. Aber in jedem Fall empfehle ich dir eine kurze und einfache Anleitung zu der Apachekonfiguration durchzulesen, bis du die oben genannten Schritte sicher beherrschst (mein Gott, dieses Wort kommt mit gerade mal 2 Vokalen aus). Das von dir entdeckte /usr/lib/cgi-bin Verzeichnis ist garantiert nicht das Richtige, du solltest dein "document root" (wo die HTML Dateien liegen) und dein cgi-bin schön beisammen halten, am besten unter /srv oder in deinem home Verzeichnis.

    Gruß,
    Cruz

    1. Ach und noch eine Kleinigkeit, die am Anfang gerne vergessen wird. Der apache muss natürlich auch gestartet sein, sonst funktioniert gar nichts. Am besten richtest du es so ein, dass er beim Booten automatisch gestartet wird.