Conny: #!/usr/bin/perl einbinden in die htaccess

hallo,
Kann man in eine htaccess datei ein cgi direkt einbinden?
Wenn ja wie?
gruss conny

P.S.hab auch schon bei http://httpd.apache.org/docs/misc/rewriteguide.html
geguckt aber ich seh da kein direkten befehl für die htaccess oder sollte ich sagen ich vesteh
das beispiel dort nicht?

  1. nee leider nicht

    1. Hallo,

      nee leider nicht

      Herzlichen Dank fuer die Verschwendung wertvoller Bandbreite.

      Gruesse,
       CK

  2. Kann man in eine htaccess datei ein cgi direkt einbinden?

    CGI ist eine Schnittstellendefinition zwischen Webserver und anderen Programmen, die ihrerseits Webseiten (oder sonstige Daten, die von einem Webbrowser angefragt wurden) ausgeben. Die .htaccess ist hingegen eine Einstellungsdatei für den Webserver, also etwas komplett anderes.

    Wenn Du Dein Ansinnen etwas genauer erklären würdest, könnte man Dir auch besser helfen und eventuelle Alternativen aufzeigen.

    Gruß,
      soenk.e

    1. Kann man in eine htaccess datei ein cgi direkt einbinden?

      hallo,

      CGI ist eine Schnittstellendefinition zwischen Webserver und anderen Programmen, die ihrerseits Webseiten (oder sonstige Daten, die von einem Webbrowser angefragt wurden) ausgeben. Die .htaccess ist hingegen eine Einstellungsdatei für den Webserver, also etwas komplett anderes.

      Wenn Du Dein Ansinnen etwas genauer erklären würdest, könnte man Dir auch besser helfen und eventuelle Alternativen aufzeigen.

      ja kann ich,

      Gruß,
        soenk.e

      ich hab diese seite http://httpd.apache.org/docs/misc/rewriteguide.html
      gesehen unter "Extended Redirection" desshalb kam ich auf diese idee ein cgi direkt einzubinden in die htaccess.
      Nun da es nicht geht erübrigt sich das,was ich damit erreichen wollte ist folgendes:
      Ich möchte das nur dieses cgi aufgerufen wird und keine .html seite.
      Also wenn jetzt jemand die index.html aufruft oder eine andere page.html,dann sollte automatisch das cgi anstatt diese angeforderte
      html seite aufgerufen werden.
      Dazu hab ich dies gefunden in der zwischenzeit und in die htaccess eingefügt:
      RewriteEngine  on
      RewriteCond %{REQUEST_FILENAME}   !-s
      RewriteRule /* http://www.seite.de/index.cgi [R,L]

      aber es funtz nur wenn jemand eine seite aufruft die es nicht gibt.
      Ich möchte aber dass dieses cgi aufgerufen wird auch wenn eine html
      angefordert wird,das heisst man sollte dann schon alles sehen können
      wie z.B. bilder etc.
      Ok ich hoffe das problem ausführlich beschrieben zu haben
      und bis bald gruss
      conny

      1. Ich möchte das nur dieses cgi aufgerufen wird und keine .html seite.
        Also wenn jetzt jemand die index.html aufruft oder eine andere page.html,dann sollte automatisch das cgi anstatt diese angeforderte
        html seite aufgerufen werden.

        Das ist kein Problem.

        Dazu hab ich dies gefunden in der zwischenzeit und in die htaccess eingefügt:
        RewriteEngine  on
        RewriteCond %{REQUEST_FILENAME}   !-s
        RewriteRule /* http://www.seite.de/index.cgi [R,L]

        aber es funtz nur wenn jemand eine seite aufruft die es nicht gibt.

        Logisch, schau Dir doch mal die Anleitung zu mod_rewrite an, insbesondere zu RewriteCond unter http://httpd.apache.org/docs/mod/mod_rewrite.html#RewriteCond. Dort heißt es:

        Syntax: RewriteCond TestString CondPattern
          [..]

        There are some special variants of CondPatterns. Instead of real
          regular expression strings you can also use one of the following:

        - '-s' (is regular file with size)
            Treats the TestString as a pathname and tests if it exists and is
            a regular file with size greater than zero.

        Du hast also eine Bedingung (Condition) für Deine Regel gesetzt, die besagt, daß das aktuelle Objekt keine ("keine" wegen dem ! davor) Datei mit Inhalt sein darf (-s).
        In der darauf folgenden Zeile (RewriteRule ..) folgt dann die eigentliche Regel, nach der die URL geändert wird.

        So, und nun darfst Du dreimal raten, wie man den Server dazu kriegt, das Umschreiben in der dritten Zeile ohne die Bedingung der zweiten Zeile auszuführen... :)

        Davon abgesehen: Du kannst Dir überlegen, ob Du eine externe Umleitung haben möchtest (wie jetzt), so daß der Browser statt xyz die neue Adresse index.cgi auch anzeigt, oder ob Du lieber eine interne haben willst, so daß die Adresse im Browser gleich bleibt. In letzterem Fall müßte es folgendermaßen aussehen:

        RewriteBase /
          RewriteRule .* index.cgi [L]

        Hinter RewriteBase muß der HTTP-Pfad zum Verzeichnis, in dem diese .htaccess liegt, stehen. Ist der Pfad also http://server.de/.htaccess lautet RewriteBase / (wie oben), ist der Pfad http://server.de/blabla/kringel/.htaccess, lautet RewriteBase /blabla/kringel/ .
        Siehe auch http://httpd.apache.org/docs/mod/mod_rewrite.html#RewriteBase.

        Last but not least befürchte ich mal, daß Du Dir eine Endlosschleife bastelst, d.h. der Server bekommt URL xyz, macht daraus wie gewünscht index.cgi, und durchläuft dann die ganze Sache mit index.cgi nochmal. Bei der externen Weiterleitung müsste das auf jeden Fall so passieren, bei der internen bin ich mir nicht ganz sicher.
        Falls der Browser also nicht mehr reagiert, muß die Regel so angepasst werden, daß sie auf alles reagiert, was nicht index.cgi heißt:

        RewriteRule !^index.cgi$ index.cgi [L]

        Das ! negiert die folgende Aussage wiederum, der Rückstrich dient dazu, dem Server zu sagen, daß der . ein Punkt ist und kein Platzhalter für "ein beliebiges Zeichen", die Bedeutung von ^ und $ solltest Du Dir in der Anleitung selber rauslesen: http://httpd.apache.org/docs/mod/mod_rewrite.html#RewriteRule.

        Ich hoffe, das war halbwegs deutlich, funktioniert und daß Du auch versuchst zu verstehen, was da überhaupt passiert - dann kannst Du's nächstes Mal nämlich alleine. Vom Abschreiben lernt man nix :)

        Gruß,
          soenk.e

        1. Ich möchte das nur dieses cgi aufgerufen wird und keine .html seite.
          Also wenn jetzt jemand die index.html aufruft oder eine andere page.html,dann sollte automatisch das cgi anstatt diese angeforderte
          html seite aufgerufen werden.

          hallo soenk.e,
          danke für die Anleitung und den hinweis.Vor lauter Bäumen sah ich den
          wald nicht mehr :-)

          Das ist kein Problem.

          Dazu hab ich dies gefunden in der zwischenzeit und in die htaccess eingefügt:
          RewriteEngine  on
          RewriteCond %{REQUEST_FILENAME}   !-s
          RewriteRule /* http://www.seite.de/index.cgi [R,L]

          aber es funtz nur wenn jemand eine seite aufruft die es nicht gibt.

          Logisch, schau Dir doch mal die Anleitung zu mod_rewrite an, insbesondere zu RewriteCond unter http://httpd.apache.org/docs/mod/mod_rewrite.html#RewriteCond. Dort heißt es:

          Syntax: RewriteCond TestString CondPattern
            [..]

          There are some special variants of CondPatterns. Instead of real
            regular expression strings you can also use one of the following:

          - '-s' (is regular file with size)
              Treats the TestString as a pathname and tests if it exists and is
              a regular file with size greater than zero.

          Du hast also eine Bedingung (Condition) für Deine Regel gesetzt, die besagt, daß das aktuelle Objekt keine ("keine" wegen dem ! davor) Datei mit Inhalt sein darf (-s).
          In der darauf folgenden Zeile (RewriteRule ..) folgt dann die eigentliche Regel, nach der die URL geändert wird.

          So, und nun darfst Du dreimal raten, wie man den Server dazu kriegt, das Umschreiben in der dritten Zeile ohne die Bedingung der zweiten Zeile auszuführen... :)

          Davon abgesehen: Du kannst Dir überlegen, ob Du eine externe Umleitung haben möchtest (wie jetzt), so daß der Browser statt xyz die neue Adresse index.cgi auch anzeigt, oder ob Du lieber eine interne haben willst, so daß die Adresse im Browser gleich bleibt. In letzterem Fall müßte es folgendermaßen aussehen:

          nö die addresse index.cgi soll angezeigt werden und dann durch das cgi diese html's anzeigen,weil das cgi
          eigentlich eine frameset ausgabe ist.

          RewriteBase /
            RewriteRule .* index.cgi [L]

          Hinter RewriteBase muß der HTTP-Pfad zum Verzeichnis, in dem diese .htaccess liegt, stehen. Ist der Pfad also http://server.de/.htaccess lautet RewriteBase / (wie oben), ist der Pfad http://server.de/blabla/kringel/.htaccess, lautet RewriteBase /blabla/kringel/ .
          Siehe auch http://httpd.apache.org/docs/mod/mod_rewrite.html#RewriteBase.

          Last but not least befürchte ich mal, daß Du Dir eine Endlosschleife bastelst, d.h. der Server bekommt URL xyz, macht daraus wie gewünscht index.cgi, und durchläuft dann die ganze Sache mit index.cgi nochmal. Bei der externen Weiterleitung müsste das auf jeden Fall so passieren, bei der internen bin ich mir nicht ganz sicher.
          Falls der Browser also nicht mehr reagiert, muß die Regel so angepasst werden, daß sie auf alles reagiert, was nicht index.cgi heißt:

          Ja ich versteh es gibt tatsächlich eine endlosschleife durch den oben genannten
          RewriteBase /
          RewriteRule .* index.cgi [L]
          befehl in der htaccess.Aber ich habs so geändert
          RewriteRule .html index.cgi [L]
          was widerum ne endlosschleife bewirkt wenn das html im cgi aufgerufen wird.

          RewriteRule !^index.cgi$ index.cgi [L]

          muss oder kann dieser pfad zusätzlich eingefügt werden?

          Das ! negiert die folgende Aussage wiederum, der Rückstrich dient dazu, dem Server zu sagen, daß der . ein Punkt ist und kein Platzhalter für "ein beliebiges Zeichen", die Bedeutung von ^ und $ solltest Du Dir in der Anleitung selber rauslesen: http://httpd.apache.org/docs/mod/mod_rewrite.html#RewriteRule.

          ja das hab ich schon gesehen und verstanden,aber ich denke es wird nicht gehen was ich haben möchte.

          Ich hoffe, das war halbwegs deutlich, funktioniert und daß Du auch versuchst zu verstehen, was da überhaupt passiert - dann kannst Du's nächstes Mal nämlich alleine. Vom Abschreiben lernt man nix :)

          Trotzdem besten dank
          für die Hinweise,jedenfalls hab ich da wieder mal etwas
          gelernt :-) gruss Conny

          Gruß,
            soenk.e

          1. Last but not least befürchte ich mal, daß Du Dir eine Endlosschleife bastelst, d.h. der Server bekommt URL xyz, macht daraus wie gewünscht index.cgi, und durchläuft dann die ganze Sache mit index.cgi nochmal.

            Ja ich versteh es gibt tatsächlich eine endlosschleife durch den oben genannten
            RewriteBase /
            RewriteRule .* index.cgi [L]

            RewriteRule !^index.cgi$ index.cgi [L]

            muss oder kann dieser pfad zusätzlich eingefügt werden?

            Diese Regel besagt, daß alles, was _nicht_ exakt auf index.cgi passt, in index.cgi umgeschrieben wird ("nicht" wegen dem Ausrufezeichen vorne) - ist also genau das, was Du haben willst.
            Setze diese Regel zusammen mit der RewriteBase-Anweisung sowie hinten einem [R,L] statt nur [L] (R wie Redirect, eine externe Weiterleitung, also Anweisung an den Browser, eine neue Anfrage mit neuer Adresse zu starten) in Deine .htaccess (_nicht_ zusätzlich, dies _ist_ für sich alleine die gesuchte Regel).

            Gruß,
              soenk.e

            1. Last but not least befürchte ich mal, daß Du Dir eine Endlosschleife bastelst, d.h. der Server bekommt URL xyz, macht daraus wie gewünscht index.cgi, und durchläuft dann die ganze Sache mit index.cgi nochmal.

              Ja ich versteh es gibt tatsächlich eine endlosschleife durch den oben genannten
              RewriteBase /
              RewriteRule .* index.cgi [L]

              RewriteRule !^index.cgi$ index.cgi [L]

              muss oder kann dieser pfad zusätzlich eingefügt werden?

              Diese Regel besagt, daß alles, was _nicht_ exakt auf index.cgi passt, in index.cgi umgeschrieben wird ("nicht" wegen dem Ausrufezeichen vorne) - ist also genau das, was Du haben willst.
              Setze diese Regel zusammen mit der RewriteBase-Anweisung sowie hinten einem [R,L] statt nur [L] (R wie Redirect, eine externe Weiterleitung, also Anweisung an den Browser, eine neue Anfrage mit neuer Adresse zu starten) in Deine .htaccess (_nicht_ zusätzlich, dies _ist_ für sich alleine die gesuchte Regel).

              Gruß,
                soenk.e

              hallo,

              Ok das geht leider nicht entweder er findet die seite und gibt 302found aus
              aber zeigt keine seite an oder aber er lädt und lädt ect. endlos...
              Um es nochmal zu formulieren,ich möchte nicht dass grundsätzlich alles
              im index.cgi geöffnet werden muss ,ich möchte nur dass die datei .html
              im frameset das ein index.cgi ist, aufgeht was eigentlich so sein sollte,weil
              alle seiten in diesem frameset,das ein index.cgi ist sein müssten .Wenn also jemand
              auf die seite1.html kommt sei es versehentlich oder absichtlich,dann sollte
              automatisch diese seite1.html in diesem frameset index.cgi aufgehen.
              Alle weitere seiten werden dann in diesem index.cgi aufgerufen und gezeigt.
              Schönen gruss
              Conny

              P.S. Mit dem javascript gehts auch,was dann so aussehen würde:

              if (parent.frames.length == 0)parent.location.href="index.cgi";self.focus();
              aber das problem ist nicht jeder hat javascript aktiviert.

              1. Wenn also jemand auf die seite1.html kommt sei es versehentlich oder absichtlich,dann sollte automatisch diese seite1.html in diesem frameset index.cgi aufgehen.

                Äh, ah, ja, gut, ok :) Das geht garnicht auf der Seite des Servers, weil der Server nicht weiß, ob der 5000km entfernt stehende Browser gerade ein Frameset anzeigt oder nicht.
                Bleibt also nur clientseitige Technik: Javascript. Eine andere Möglichkeit gibt es nicht.

                Gruß,
                  soenk.e

                PS: Aber immerhin hast Du jetzt schonmal mit mod_rewrite gespielt. Ist ja auch was wert <:)