Silke: mod rewrite

Hallo,
ich habe verschiedene Artikel gelesen, wie man mit mod rewrite vermeiden kann , dass lange URLs eingegeben werden.
Der Anwender gibt also www.example.com/index.html ein und wird umgeleitet z.B. zu einen Perl-Script. Dabei bleibt die eingegebene Adresse erhalten. Anwender und Suchmaschinen sehen also nur die Original-URL.
Und jetzt habe ich mein Beispiel von wenigen Zeichen bestimmt 20 mal gelesen und finde nicht den Grund, warum bei mir zwar die Umleitung erfolgt, aber auch die URL geändert wir!
Hier mein .htaccess-Eintrag:

RewriteEngine on
RewriteRule (.*).html$ http://www.example.com/cgi-bin/index.pl?s=$1

Kann mir jemand auf die Sprünge helfen?

  1. hallo,

    jetzt habe ich mein Beispiel von wenigen Zeichen bestimmt 20 mal gelesen und finde nicht den Grund, warum bei mir zwar die Umleitung erfolgt, aber auch die URL geändert wir!
    Hier mein .htaccess-Eintrag:
    RewriteEngine on
    RewriteRule (.*).html$ http://www.example.com/cgi-bin/index.pl?s=$1

    Du hast eine vollständige URL angegeben und schickst jeden Besucher deiner Seite zu einer völlig neuen Adresse, vermutlich auf einem anderen Server. Was du gerne möchtest, läßt sich erreichen, wenn du auf einen anderen Ablageort auf demselben Server umleitest, also beispielsweise
      RewriteRule (.*).html$ /cgi-bin/index.pl?s=$1

    Grüße aus Berlin

    Christoph S.

    --
    Visitenkarte
    ss:| zu:) ls:& fo:) va:) sh:| rl:|
    1. Oh Schreck lass nach!
      Gibt es dann eine andere Möglichkeit folgendes zu erreichen.
      Ich habe nur auf einem Server die Möglichkeit CGIs zu erstellen.
      Mit einem derartigen CGI möchte ich alle Homepages erstellen, die auf verschiedenen Server liegen wobei natürlich nicht die Adresse des CGI-Programms erscheinen soll.

      1. Moin!

        Oh Schreck lass nach!
        Gibt es dann eine andere Möglichkeit folgendes zu erreichen.
        Ich habe nur auf einem Server die Möglichkeit CGIs zu erstellen.
        Mit einem derartigen CGI möchte ich alle Homepages erstellen, die auf verschiedenen Server liegen wobei natürlich nicht die Adresse des CGI-Programms erscheinen soll.

        Damit dein CGI wirken kann, muß der Browser logischerweise Kontakt zu diesem Server aufnehmen. Und dazu muß er die Adresse kennen.

        mod_rewrite kann nur dann unsichtbar umlenken, wenn das CGI und die vom Browser angeforderte URL auf dem gleichen Server liegen. Alles andere erzeugt Redirects.

        Nur mit Glück ist auf deinem Ursprungsapachen auch das Proxy-Modul installiert. Dann würde der Ursprungsserver anstelle des Browsers mit dem CGI-Server Kontakt aufnehmen.

        Das hat allerdings seinen Preis: Doppelter Traffic (Seiten gehen rein und wieder raus) und langsameres Seitenladen (der Browser wartet auf den Server, und der wartet wieder auf den anderen Server). Ist also nicht ratsam, wenn man es vermeiden kann.

        - Sven Rautenberg

        --
        "Love your nation - respect the others."
        1. hallo Sven,

          Mit einem derartigen CGI möchte ich alle Homepages erstellen, die auf verschiedenen Server liegen wobei natürlich nicht die Adresse des CGI-Programms erscheinen soll.
          Damit dein CGI wirken kann, muß der Browser logischerweise Kontakt zu diesem Server aufnehmen. Und dazu muß er die Adresse kennen.

          Das wäre der korrekte Hinweis, wenn es wirklich nur um das im OP benannte CGI-Script geht. Ich bin aber nicht sicher, ob das tatsächlich der Aufgabe entspricht, vor die sich Silke gestellt sieht. Es heißt doch jetzt "möchte ich alle Homepages erstellen" - und "erstellen" ist enorm viel mehr als bloß eine Weiterleitung auf bereits bestehende Seiten.

          Das mit dem "Erstellen" geht ja prinzipiell durchaus auch, hat bloß so ziemlich gar nichts mit .htaccess zu tun. Das CGI-Script müßte dann beispielsweise NET::FTP können und ihm müßten die Zugangsdaten für die anderen Server bekannt sein. Es wäre allerdings ein sehr fragwürdiges Experiment.

          Grüße aus Berlin

          Christoph S.

          --
          Visitenkarte
          ss:| zu:) ls:& fo:) va:) sh:| rl:|
          1. Moin!

            Ich bin aber nicht sicher, ob das tatsächlich der Aufgabe entspricht, vor die sich Silke gestellt sieht.

            Das hier ist die Aufgabe:
            "Ich habe nur auf einem Server die Möglichkeit CGIs zu erstellen.
            Mit einem derartigen CGI möchte ich alle Homepages erstellen, die auf verschiedenen Server liegen wobei natürlich nicht die Adresse des CGI-Programms erscheinen soll."

            Oder übersetzt: Nur ein Server bietet CGI an - wie kriegt man es jetzt hin, dass alle anderen Server auch CGI-Fähigkeit erhalten, ohne dass man das in der URL sieht.

            - Sven Rautenberg

            --
            "Love your nation - respect the others."
            1. Das hier ist die Aufgabe:
              "Ich habe nur auf einem Server die Möglichkeit CGIs zu erstellen.
              Mit einem derartigen CGI möchte ich alle Homepages erstellen, die auf verschiedenen Server liegen wobei natürlich nicht die Adresse des CGI-Programms erscheinen soll."

              Oder übersetzt: Nur ein Server bietet CGI an - wie kriegt man es jetzt hin, dass alle anderen Server auch CGI-Fähigkeit erhalten, ohne dass man das in der URL sieht.

              Noch einmal in meinen Worten der Hintergrund meiner Frage:

              Alle meine Homepages sind fast identisch aufgebaut aufgebaut:

              index.shtml auf example1.com:

                
              <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">  
              <html>  
              <head>  
              <!--#include virtual="/meta.inc" -->  
              <link rel="stylesheet" ....>  
              <script type="text/javascript" ....></script>  
              </head>  
              <body>  
              <div id="Navigation">  
              <!--#include virtual="/dir.inc" -->  
              <!--#include virtual="/aktuelles.inc" -->  
              <!--#include virtual="/dirkontakt.inc" -->  
              <!--#include virtual="/links_int.inc" -->  
              </div>  
              <div id="header">  
              <!--#include virtual="/header.inc" -->  
              </div>  
              <div id="Kopf">  
              <!--#include virtual="/kopf.inc" -->  
              </div>  
              <div id="Inhalt">  
              <!--#include virtual="/index/inhalt.inc" -->  
              </div>  
              </body>  
              </html>  
              
              

              seite1.shtml auf example1.com unterscheidet sich nur durch
                 <!--#include virtual="/     seite1      /inhalt.inc" -->

              Und genau so sieht es aus auf example2.com.

              Beim Aufruf des Kontaktformulars werden alle Seiten umgeleitet auf ein cgi-Skript auf dem einen Server example.com, der CGI erlaubt.
              Dort wird das Kontaktformular und das Antwortformular so generiert, dass im Ergebnis obiges html entsteht, wobei
                 <!--#include virtual="/index/inhalt.inc" --> ersetzt wird durch Kontakt- bzw. Antwortinformation.
              Kontakt- und Antwortformular haben dann bisher jeweils die komische Adresse example.com/cgi-bin/kontakt.pl.
              Dies hat mich bisher nicht weiter gestört, da diese Formulare ja nicht häufig aufgerufen wurden.
              Nur habe ich jetzt gedacht. Wenn ich Kontakt- und Antwortformular schon zentral für alle meine Homepages mache, warum dann nicht gleich die Homepages selbst?
              Nur da ist es natürlich unschön, wenn jemand example1.com aufruft und erhält dann eine komplett andere URL angezeigt.

              Gruß Silke