Beate Mielke: Redirect fuer Index.html im Apache

Hallo ForumerInnen,

die meisten Webserver sind so eingestellt, dass man z.B. bei Eingabe der folgenden URL

http://www.domain.de/verz

automatisch auf

http://www.domain.de/verz/index.html

umgeleitet wird.

Wie stellt man so etwas ein, mit einem Redirect-Befehl?

Und wie muß der Befehl lauten, damit, falls "verz" nun doch eine aufrufbare Datei ist, wenn auch ohne Endung "html" o.ae., in dem Fall dann also doch nicht /index.html angehaengt wird?

Viele Gruesse

Beate Mielke

  1. Hallo Beate!

    die meisten Webserver sind so eingestellt, dass man z.B. bei Eingabe der folgenden URL

    http://www.domain.de/verz

    automatisch auf

    http://www.domain.de/verz/index.html

    umgeleitet wird.

    Wie stellt man so etwas ein, mit einem Redirect-Befehl?

    nein, kein redirect:
    bei apache z.b. kann man mehrere sog. default-index angeben, also praktisch startdateien. meist ist das index.html oder teilw. default.html -.asp -.php3 ...

    wenn der server in dem angegebenen verzeichnis
    (also startverzeichnis der domain oder unterverzeichnis in der domain) eine dieser dateien findet, wird diese angezeigt. wenn keine gefunden wird, wird je nach einstellung der verzeichnisinhalt aufgelistet oder ein fehler ausgegeben.

    Und wie muß der Befehl lauten, damit, falls "verz" nun doch eine aufrufbare Datei ist, wenn auch ohne Endung "html" o.ae., in dem Fall dann also doch nicht /index.html angehaengt wird?

    du muesstest als erste startdatei diesen dateinamen angeben. ob da eine endung dranhaengt oder nicht, ist eigentlich egal. nur wenn ein unterverz. mit gleichem namen vorhanden ist, koennte es probleme geben.

    zur einstellung fuer apache such bitte im archiv, da stand glaube ich etwas, ich habs leider nicht zur hand. ansonsten such in der httpd.conf (win im apache verz. linux unter /etc/httpd) nach index.

    Gruss
    Thomas

  2. Hallo Beate,

    die meisten Webserver sind so eingestellt, dass man z.B. bei Eingabe der folgenden URL

    http://www.domain.de/verz

    automatisch auf

    http://www.domain.de/verz/index.html

    umgeleitet wird.

    Wie stellt man so etwas ein, mit einem Redirect-Befehl?

    in Apache's httpd.conf ist das direktiv DirectoryIndex dafür zuständig, zB:

    DirectoryIndex index.html index.htm index.shtml index.php index.phtml index.cgi

    ciao,
    rob.

    1. in Apache's httpd.conf ist das direktiv DirectoryIndex dafür zuständig, zB:

      DirectoryIndex index.html index.htm index.shtml index.php index.phtml index.cgi

      Hallo Robert,

      ich habe das inzwischen eingebaut und es funktioniert, aber leider ist damit das Grundproblem nicht gelöst,
      nämlich daß, wenn ein User

      http://www.domain.de/hallo

      anstelle von

      http://www.domain.de/hallo/

      aufruft, die URL trotzdem in den kompletten Pfad umgewandelt wird.

      also in http://www.domain.de/hallo/index.html

      im zweiten Fall funktioniert es, im ersten nicht :-(

      Wer weiß Rat? Ich bin mir sicher, daß dieses Problem schon tausendfach gelöst wurde aber ich finde es einfach nicht.

      Viele Gruesse

      Beate

      1. Hallo Beate!

        Erstmal zum Verstaendnis: Diese Umleitung von http://www.domain.de/verz auf http://www.domain.de/verz/index.html gibt es nicht, jedenfalls nicht so direkt.

        Rufst Du eine URL ab, hinter der ein Verzeichnis steht, und Du laesst den / am Ende weg, dann antwortet der Webserver mit einem Redirect. Auf Ebene des HTTP sieht das folgendermassen aus. Der Browser fragt mit

        GET /verz HTTP/1.0
        Host: www.domain.de

        und der Webserver antwortet mit:

        HTTP/1.1 301 Moved Permanently
        Date: Mon, 10 Apr 2000 12:46:24 GMT
        Server: Apache/1.3.6 (Unix)
        Location: http://www.domain.de/verz/

        Das heisst fuer den Browser, dass die angeforderte Resource permament umgezogen ist, und er doch bitte bei der im Location-Header genanannten Stelle mal nachfragen soll. Und das macht der dann auch, und er zeigt das im Browser auch an, indem er die neue Location (also mit /) in die Location bar schreibt.

        Und dann ist da noch der Directory Index. Wenn ein Verzeichnis (mit /) abgerufen wird, und in diesem Verzeichnis gibt es eine Datei, deren Name einem von denen in der DirectoryIndex-Option angegebenen entspricht, wird der Inhalt dieser Datei zurueckgeliefert. Gibt es eine solche Datei nicht, wird ein Directory listing erzeugt, oder - falls in httpd.conf nicht 'Options Indexes' fuer dieses Verzeichnis angegeben ist - ein 403 Forbidden Error geliefert.

        http://www.domain.de/hallo
        anstelle von
        http://www.domain.de/hallo/
        aufruft, die URL trotzdem in den kompletten Pfad umgewandelt wird.
        also in http://www.domain.de/hallo/index.html
        im zweiten Fall funktioniert es, im ersten nicht :-(

        Was passiert denn stattdessen? Ein 404 Error? (Falls ja, handelt es sich bei /hallo/ um ein virtuelles Verzeichnis (Alias)?)

        Bis dann, Roland

        1. Was passiert denn stattdessen? Ein 404 Error? (Falls ja, handelt es sich bei /hallo/ um ein virtuelles Verzeichnis (Alias)?)

          Hallo Roland,

          genau das passiert - ein 404-Error - und genau das möchte ich abstellen, aber wie ???

          Viele Gruesse

          Beate

          1. Hallo!

            Was passiert denn stattdessen? Ein 404 Error? (Falls ja, handelt es sich bei /hallo/ um ein virtuelles Verzeichnis (Alias)?)

            genau das passiert - ein 404-Error - und genau das möchte ich abstellen, aber wie ???

            Leider hast Du die Frage in Klammern nicht beantwortet. Ich nehme jetzt einfach mal "Ja" als Antwort an, da mir nichts anderes zu diesem Verhalten einfaellt.

            Du hast also (in meiner Annahme) einen Alias fuer "/hallo/" gesetzt:
                Alias /hallo/ "/home/beate/some/dir/xyz/"
            Mit diesem Alias hast Du das virtuelle Verzeichnis /hallo/ erzeugt; der Inhalt kommt von der Platte unter dem hinten genannten Pfad (waehrend die Dateien normalerweise unterhalb von z.B. /opt/apache/htdocs/ gesucht werden). Das Problem ist, dass die Alias-Erkennung wirklich nur auf "/hallo/" anspricht, nicht aber auf "/hallo". Letzteres wuerde nach wie vor auf /opt/apache/htdocs/hallo abgebildet werden, was es sehr wahrscheinlich nicht gibt. Und deshalb gibt's einen 404.

            Du muesstest den Alias daher so definieren:
                    Alias /hallo "/home/beate/some/dir/xyz"
            Also vorn und hinten den letzten / weglassen. Dadurch wird bei Aufruf von www.domain.com/hallo ein Alias-Match festgestellt und auf den physikalischen Pfad gemappt. Dann wird natuerlich festgestellt, dass es sich bei dem xyz um ein Verzeichnis handelt und ein Redirect auf www.domain.com/hallo/ ausgegeben. Der Browser fragt wieder unter der neuen Adresse an und es wird wiederum ein Match auf /hallo festgestellt. Und: Alles was danach kommt (naemlich der /) wird an den gemappten Pfad angehaengt. Du fragst also (pseudosyntaktisch) nach
                "/hallo" + "/"
            das wird abgebildet auf
                "/home/beate/some/dir/xyz" + "/"
            und
                "/hallo" + "/laber.html"   (also www.domain.com/hallo/laber.html)
            wuerde abgebildet werden auf
                "/home/beate/some/dir/xyz" + "/laber.html"
            .

            Das ist das ganze Problem mit den Aliases. Leider wird in der Vorkonfiguration des Apache dieser Weg praeferiert, naemlich mit den Abbildungen /icons/ und /cgi-bin/. Ich aendere diese Angaben immer in /icons und /cgi-bin.

            HTH, Roland

            1. Hallo Roland,

              Leider hast Du die Frage in Klammern nicht beantwortet. Ich nehme jetzt einfach mal "Ja" als Antwort an, da mir nichts anderes zu diesem Verhalten einfaellt.

              Du hast recht, die Antwort wäre Ja gewesen, aber das habe ich nicht gewußt, das hat nämlich jemand anderes als ich dort hineingeschrieben. Du hast mich jetzt dadurch aber auf die Idee gebracht mal nach Aliassen zu suchen.

              In etwa ist das auch nun die Lösung, allerdings gibt es da noch mehr Aliasse, durch die ich mich erst noch einmal richtig durchwurschteln muß.

              HTH, Roland

              Wie gut, dass mir vor ein paar Tagen jemand verraten hat, was HTH heisst ;-)

              yes, that helps, thank you again :-)

              Viele Gruesse

              Beate

      2. ich habe das inzwischen eingebaut und es funktioniert, aber leider ist damit das Grundproblem nicht gelöst,
        nämlich daß, wenn ein User
        http://www.domain.de/hallo
        anstelle von
        http://www.domain.de/hallo/
        aufruft, die URL trotzdem in den kompletten Pfad umgewandelt wird.
        also in http://www.domain.de/hallo/index.html
        im zweiten Fall funktioniert es, im ersten nicht :-(

        Ich habe nicht verstanden, was genau bei welcher URL
        passieren soll (und ich vermute, die anderen Antwortenden
        auch nicht).
        Welche Dateien existieren auf Deinem Rechner, und welche
        URL soll auf welche Dateil abgebildet werden?

        Wie directory browsing funktioniert, das hast Du jetzt
        erklärt bekommen. Es wird aktiviert, wenn Deine URL mit
        einem "/" endet - und das tut sie, nach dem redirect-
        Dialog zwischen Browser und Webserver.
        Ich kann mir nicht vorstellen, was außer diesem Verhalten
        Du erreichen wollen könntest. Du suggerierst, daß "/hallo"
        und "/hallo/" für Dich zwei verschiedene Dinge sein sollen.
        Wenn aber "/hallo/" existiert, dann kann - auf Dateiebene -
        "/hallo" nicht ebenfalls existieren (in demselben Verzeichnis
        können nicht zwei gleichnamige Objekte existieren, jedenfalls
        weder in Windows noch in UNIX).

        Was allerdings bisher noch nicht angesprochen wurde, ist,
        daß Du im Webserver "/hallo" explizit auf ein existierendes
        Dokument mit einem beliebigen anderen Pfadnamen abbilden
        kannst. *Das* geht natürlich auch - egal, ob Datei oder Ver-
        zeichnis. (Literatur:
        http://www.apache.org/docs/mod/mod_alias.html#alias.)
        Das kann man verwenden, wenn man in seinen Hyperlinks eine
        bestimmte URL-Struktur ausgeprägt hat, aber aus sekundären
        Gründen (Verteilung auf mehrere Platten für Performance,
        Netzwerkstruktur, ...) logische und physikanische Verzeichnis-
        struktur unbedingt unterschiedlich haben muß (oder beispiels-
        weise Verzeichnisstrukten nach Schema A braucht, damit ein
        Softwareprodukt funktioniert, aber nach Schema B strukturieren
        will, um intuitivere Web-Navigation in seiner Dokumentation zu
        fördern).

        Ob es allerdings ratsam ist, "/hallo/" *und* "/hallo"
        mit unterschiedlicher Bedeutung parallel zu halten, das
        sei mal dahingestellt ...

        1. Hallo Michael,

          danke für die lange Ausführung, trotzdem noch einmal das Problem:

          auf dem Rechner vorhanden:

          http://www.domain.de/hallo/index.html

          möchte ich so aufrufen können:

          http://www.domain.de/hallo/

          kein Problem gibt mir die index.html-Datei aus

          aber so soll es auch gehen:

          http://www.domain.de/hallo

          und genau das geht nicht - ergibt einen 404-Error - und wie schon an Roland beschrieben, was muß ich (im Apche-Server ?) eintragen, damit das in Zukunft doch geht?

          Gruß

          Beate

          1. http://www.domain.de/hallo/
            kein Problem gibt mir die index.html-Datei aus
            aber so soll es auch gehen:
            http://www.domain.de/hallo
            und genau das geht nicht - ergibt einen 404-Error - und wie schon an Roland beschrieben, was muß ich (im Apche-Server ?) eintragen, damit das in Zukunft doch geht?

            Ah, so.

            Ein Blick in die Apache-FAQ - da habe ich doch mal etwas
            über ein solches Problem gelesen ... hier ist es:

            9.Why does accessing directories only work when I include the trailing "/"
               (e.g., http://foo.domain.com/~user/) but not when I omit it
               (e.g., http://foo.domain.com/~user)?

            When you access a directory without a trailing "/", Apache needs to send what is called a redirect to
               the client to tell it to add the trailing slash. If it did not do so, relative URLs would not work properly.
               When it sends the redirect, it needs to know the name of the server so that it can include it in the
               redirect. There are two ways for Apache to find this out; either it can guess, or you can tell it. If your
               DNS is configured correctly, it can normally guess without any problems. If it is not, however, then
               you need to tell it.

            Add a ServerName directive to the config file to tell it what the domain name of the server is.

            http://www.apache.org/docs/misc/FAQ.html#set-servername

            Also: Hast Du über die Anweisung "ServerName" einen Namen für Deinen Server eingetragen?
            Apache braucht diesen, um das Redirect korrekt abwickeln zu können.

            1. Danke Michael,

              ich glaube damit und mit Rolands Hilfe habe ich jetzt die komplette Loesung.

              Viele Gruesse

              Beate