DeWitt: directoryIndex bei cgi-Verzeichnissen

Hi SelfHTML'ler!

Ich möchte meinen Apache-Server so konfigurieren, dass beim Aufruf eines cgi-Verzeichnisses ohne Scriptname (also z.b. einfach /cgi-bin/) die Datei index.pl aufgerufen wird, also das gleiche Prinzip, welches bei normalen Verzeichnissen die index.html aufruft.

Hierzu habe ich den DirectoryIndex wie folgt geändert:
<IfModule mod_dir.c>
    DirectoryIndex index.pl index.cgi index.html index.htm
</IfModule>

Leider hat diese Änderung nicht den gewüschten Effekt; wenn ich das cgi-Verzeichnis aufrufe (egal ob mit '/cgi-bin/' oder '/cgi-bin'), bekomme ich weiterhin einen 403-Fehler (Forbidden/Permission denied). Im der error.log ist dann zu lesen "attempt to invoke directory as script".
Das Script selbst (index.pl) funktioniert übrigens einwandfrei.

Hoffe auf kundige Antworten :)

DeWitt

  1. morgens,

    Hierzu habe ich den DirectoryIndex wie folgt geändert:
    <IfModule mod_dir.c>
        DirectoryIndex index.pl index.cgi index.html index.htm
    </IfModule>

    Hm. Den <IfModule>-Container kannst du möglicherweise weglassen (ohne mod_dir ist ein Apache ziemlich sehr wenig wirksam), die DirectoryIndex-Anweisung allerdings nicht.

    Leider hat diese Änderung nicht den gewüschten Effekt

    Wieso nicht? Wo steht denn dieses "DirectoryIndex"? Hast du das in eine .htaccess gepackt? Wo läuft dein Apache  -  auf deinem eigenen Rechenr oder online?

    wenn ich das cgi-Verzeichnis aufrufe

    Das sollst du doch nicht. /cgi-bin ist grundsätzlich für direkte Zugriffe gesperrt, und du mußt schon ein bissel mehr konfigurieren, um dir da beispielsweise ein Verzeichnis-Listing einzustellen oder eine "index.*" aufzurufen. Dieses Verzeichnis ist sowas wie ein "repository", also der Werkzeugkeller. Da liegen Dinge drin, die man gelegentlich arbeiten lassen muß, aber es ist ziemlich dumpf und miefig darin, also geht man da nicht einfach mal so rein und erwartet ein Wohnzimmer mit Couch, Fernseher, Aquarium und Alabasterstatue einer schönen nackten Frau ...

    DirectoryIndex sagt (abhängig davon, wo es notiert ist), daß halt im Stammverzeichnis deines Webangebots in einer bestimmten Reihenfolge nach einem "Standarddokument" gesucht wird. Die Reihenfolge ist dabei entscheidend. Du gibst vor:
      index.pl index.cgi index.html index.htm
    Sehr gut. In genau dieser Reihenfolge wird Apache jedes Verzeichnis (bis auf /cgi-bin) daraufhin untersuchen, ob es so eine Datei gibt. Gibt es keine, wird eine Art "FTP-Listing" angezeigt  -  mit Ausnahme von /cgi-bin.

    bekomme ich weiterhin einen 403-Fehler (Forbidden/Permission denied). Im der error.log ist dann zu lesen "attempt to invoke directory as script".

    Oha. Das ist allerdings ernsthaft zu prüfen. Du solltest das zunächst wörtlich nehmen. Es läßt vermuten, daß du in deiner httpd.conf irgendwo einen Slash zuviel oder zuwenig gesetzt hast.

    Das Script selbst (index.pl) funktioniert übrigens einwandfrei.

    Das ist durchaus glaubhaft. Die Meldung aus deiner error.log läßt darauf schließen, daß es in der httpd.conf einen klitzekleinen Fehler gibt.

    Nebenbei: da du eine "error.log" hast, läuft dein Apache also auf einem Windows-System. Du solltest noch der Vollständigkeit wegen angeben, welche Apache-Version es ist (ist allerdings für deine Fragestellung wahrscheinlich ohne Bedeutung).

    Grüße aus Berlin

    Christoph S.

    1. Hi,

      Danke für die schnelle Antwort.

      Hm. Den <IfModule>-Container kannst du möglicherweise weglassen

      Ich hab das einfach so übernommen wie es in der config stand ;)

      Wo steht denn dieses "DirectoryIndex"? Hast du das in eine .htaccess gepackt? Wo läuft dein Apache  -  auf deinem eigenen Rechner oder online?

      Mein Server läuft lokal unter Windows 2000 AS, Version ist Apache/1.3.26 Server. Ich habe die Änderungen direkt in der httpd.conf gemacht.

      wenn ich das cgi-Verzeichnis aufrufe
      Das sollst du doch nicht. /cgi-bin ist grundsätzlich für direkte Zugriffe gesperrt, und du mußt schon ein bissel mehr konfigurieren, um dir da beispielsweise ein Verzeichnis-Listing einzustellen oder eine "index.*" aufzurufen. Dieses Verzeichnis ist sowas wie ein "repository", also der Werkzeugkeller. Da liegen Dinge drin, die man gelegentlich arbeiten lassen muß, aber es ist ziemlich dumpf und miefig darin, also geht man da nicht einfach mal so rein und erwartet ein Wohnzimmer mit Couch, Fernseher, Aquarium und Alabasterstatue einer schönen nackten Frau ...

      :D Nett gesagt :). Naja, es geht um eine DNS-Weiterleitung, die ich gerne direkt auf dieses cgi-Verzeichnis setzen würden, damit über die Domain auch direkt ein Script abgerufen werden kann (also www.dewitt-design.de öffnet index.pl, www.dewitt-design.de/scriptxyz.pl öffnet scriptxyz.pl im cgi-bin Verzeichnis.

      In genau dieser Reihenfolge wird Apache jedes Verzeichnis (bis auf /cgi-bin) daraufhin untersuchen, ob es so eine Datei gibt. Gibt es keine, wird eine Art "FTP-Listing" angezeigt  -  mit Ausnahme von /cgi-bin.

      Und lässt sich dieses "mit Ausnahme von /cgi-bin" irgendwie umgehen?

      bekomme ich weiterhin einen 403-Fehler (Forbidden/Permission denied). Im der error.log ist dann zu lesen "attempt to invoke directory as script".

      Oha. Das ist allerdings ernsthaft zu prüfen. Du solltest das zunächst wörtlich nehmen. Es läßt vermuten, daß du in deiner httpd.conf irgendwo einen Slash zuviel oder zuwenig gesetzt hast.

      :( ... da werd ich mal suchen T_T