Redirect fuer Index.html im Apache
Beate Mielke
- webserver
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
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
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.
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
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
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
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
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
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 ...
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
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.
Danke Michael,
ich glaube damit und mit Rolands Hilfe habe ich jetzt die komplette Loesung.
Viele Gruesse
Beate