.htacces: Frage zu redirect 301 (kompl. Verz. umlenken)
karl
- webserver
Hallo,
die alte Seitenstruktur meiner Webseite sieht so aus
http://www.example.com/foo/index.html
http://www.example.com/foo/bar.html
http://www.example.com/foo/bar/index.html
usw
Die Seite wurde umorganisiert. Ich will nun alle direkte Abfragen in den Unterverzeichnissen umleiten. Das neue Hauptverzeichnis lautet
http://www.example.com/baz/
Innerhalb von baz ist viel umorganisiert worden, weswegen es zu den oberen drei Seiten kein direktes Pendant gibt. Ich will also alle Aufrufe ins Hauptverzeichnis umleiten.
Im Klartext. Wenn ich im Browser folgende aufrufe:
http://www.example.com/foo/
http://www.example.com/foo/index.html
http://www.example.com/foo/bar.html
http://www.example.com/foo/bar/
http://www.example.com/foo/bar/index.html
http://www.example.com/foo/bar/foobar.html
soll IMMER auf http://www.example.com/baz/ umgeleitet werden (ohne index.html).
Folgendes hab ich schon versucht
redirect 301 /foo/ /baz/
redirect 301 /foo/ http://www.example.com/baz/
Leider führt dann ein Aufruf von
http://www.example.com/foo/bar.html
auf
http://www.example.com/baz/bar.html
statt auf
http://www.example.com/baz/
Was mache ich falsch? Muss ich jede Unterseite einzeln redirecten? Ich hoffe nicht.
Vielen Dank schonmal
karl
moin,
Was mache ich falsch? Muss ich jede Unterseite einzeln redirecten? Ich hoffe nicht.
ungetestet
RewriteRule ^foo/*.html$ /baz/*.html [r=301]
Hotti
ungetestet
RewriteRule ^foo/*.html$ /baz/*.html [r=301]
Du musst Klammern setzen um an $1 zu kommen
^foo/(*) /bar/$1
ungetestet
RewriteRule ^foo/*.html$ /baz/*.html [r=301]Du musst Klammern setzen um an $1 zu kommen
^foo/(*) /bar/$1
sorry, aber jetzt kapier ich grad gar nix :)
Was beduetet $1 in diesem Zusammenhang und welcher der beiden Zeilen soll ich mal testen?
vielen dank
karl
sorry, aber jetzt kapier ich grad gar nix :)
Was beduetet $1 in diesem Zusammenhang und welcher der beiden Zeilen soll ich mal testen?
$1 entspricht dem, was in der ersten Klammer zuvor durch den Ausdruck erfasst wurde.
Vergiss die Sache erst mal, ich denke hotti leidet heute unter geistiger Umnachtung.
Seine Beispiele sind syntaktisch Unsinn und können so garnicht funktionieren.
Zudem stimmt imho auch das dahinter gedachte nicht mit deinem Wunsch überein.
Sei bitte so gut und erstelle als Antwort auf dein Ausgangsposting eine neue Beschreibung und erkläre, was du genau möchtest - ich hab's nämlich auch nach mehrmaligem Lesen nicht exakt verstanden.
moin,
Vergiss die Sache erst mal, ich denke hotti leidet heute unter geistiger Umnachtung.
Seine Beispiele sind syntaktisch Unsinn und können so garnicht funktionieren.
Hab ich auch nie behauptet, siehe Schlüsselwort "ungetestet". Befasse Dich mit mod rewrite und wenn Du nicht selbst geistig umnachtet bist, bekommst Du das auch hin. Ich bin zwar ein bischen doof, aber für meine Website hab ich das auch hinbekommen. Die funktioniert so und da findest Du auch Beispiele zum Thema.
Schönen Tag auch,
Horst Haselwurz
Hab ich auch nie behauptet, siehe Schlüsselwort "ungetestet".
Ich habe dir auch nicht vorgehalten, dass du das absichtlich gemacht hast :) darum der Hinweis. Er war absolut wertfrei und kein persönlicher angriff.
Hallo
auf Anraten von suit versuche ich nochmal mein Probem zu schildern. Eigentl. ist es gar nicht so kompliziert, wie ich vermutl. geschrieben habe :-)
Also:
Ich hatte ein Hauptverzeichnis "foo" auf meinem Webserver, welches so nicht mehr existiert. In "foo" gab es einene index.html, diverse andere html-Seiten sowie weitere Unterverzeichnisse. Alle diese Dateien und Ordner existieren nicht mehr.
Wenn nun eine dieser Quellen aufgrufen wird, soll in das neue Verzeichnis "baz" umheleitet werden.
Im Klartext. Wenn ich im Browser folgende aufrufe:
http://www.example.com/foo/
http://www.example.com/foo/index.html
http://www.example.com/foo/bar.html
http://www.example.com/foo/bar/
http://www.example.com/foo/bar/index.html
http://www.example.com/foo/bar/foobar.htmlsoll IMMER auf http://www.example.com/baz/ umgeleitet werden
Grundsätzlich funktioniert das auch, aber eine direkt aufgerufene html-Seite in einem Unterverzeichnis wird wie folgt umgeleitet:
http://www.example.com/foo/bar.html
auf
http://www.example.com/baz/bar.html
statt auf
http://www.example.com/baz/
Die bar.html gibt es auch im Verz. "baz" nicht, deswegen soll einfach nur nach "/baz/" geleitet werden
Folgendes hab ich schon [mit dem obigen Ergebnis] versucht
redirect 301 /foo/ /baz/
redirect 301 /foo/ http://www.example.com/baz/
Nochmal in einem Satz:
Alles von http://www.example.com/foo/ (inkl. aller Unterseiten) soll auf http://www.example.com/baz/ umgeleitet werden.
Puh, hoffe es ist jetzt klarer!?
danke, karl
Nochmal in einem Satz:
Alles von http://www.example.com/foo/ (inkl. aller Unterseiten) soll auf http://www.example.com/baz/ umgeleitet werden.
Puh, hoffe es ist jetzt klarer!?
Das entscheidende, was mir zum Verständis fehlt, hast du aber immer noch nicht verraten :)
Soll http://www.example.com/foo/index.html (bzw. alles andere) zu http://www.example.com/baz/index.html werden
oder
soll sämtlicher Traffic direkt auf http://www.example.com/baz/ umgeleitet werden, egal was ursprünglich dahinter stand?
Hallo
oder soll sämtlicher Traffic direkt auf http://www.example.com/baz/ umgeleitet werden, egal was ursprünglich dahinter stand?
^^ genau!
Wäre super, wenn Du mir helfen könntest :)
^^ genau!
Wäre super, wenn Du mir helfen könntest :)
Gerne:
Dein "Fehler" war, dass du dafür mod_alias "falsch" verwendet hast - Redirect reagiert hier etwas anders als RedirectMatch - wie auch in der Doku ersichtlich ist.
"If the client requests http://example.com/service/foo.txt, it will be told to access http://foo2.example.com/service/foo.txt instead."
Dennoch würde ich dir empfehlen anstatt mod_alias lieber mod_rewrite zu verwenden. Die Verwendung ist ähnlich, aber in weiterer folge Flexibler, falls du doch mehr machen möchtest.
Die Syntax in diesem Fall ist:
RewriteRule REGEL ZIEL STATUS
Mit dem Wissen können wir also ohne Probleme mal folgendes bauen:
RewriteRule REGEL /baz/ [R=301]
Jetzt brauchst du nur noch eine Regel, also genauer gesagt einen regulären Ausdruck, der auf dein Wunschmuster passt.
Der sollte eigentlich recht einfach sein und entspricht eigentlich schon ziemlich dem, was du bereits gehabt hast, lediglich den Anfang des Strings solltest du noch Kennzeichnen (^) - that's it
^/foo/
Hi und vielen Dank erstmal!
RewriteRule REGEL ZIEL STATUS
Ich hab daraus folgendes gesclossen und probiert:
RewriteRule ^/foo/ /baz/ [R=301]
Rufe ich nun www.example.com/foo/ auf, erhalte ich eine 404-Fehlermeldung
Ich hab daraus folgendes gesclossen und probiert:
RewriteRule ^/foo/ /baz/ [R=301]
Rufe ich nun www.example.com/foo/ auf, erhalte ich eine 404-Fehlermeldung
Hast du einen vernünftigen Browser, der dir die HTTP-Response-Header anzeigt oder zumindest einen halbwegs brauchbaren Browser mit einer Erweiterung der dies tut?
Wenn du einen Syntaxfehler hast, bekommst du einen Error 500, wenn die Regel funktioniert einen 301 mit dem Ziel.
Wenn das Ziel nicht vorhanden ist, selbstredend in weiterer Folge einen 404.
Hast du einen vernünftigen Browser, der dir die HTTP-Response-Header anzeigt oder zumindest einen halbwegs brauchbaren Browser mit einer Erweiterung der dies tut?
Ja. Nur was soll ich bei 404 genau gucken?
Wenn du einen Syntaxfehler hast, bekommst du einen Error 500, wenn die Regel funktioniert einen 301 mit dem Ziel.
Wenn das Ziel nicht vorhanden ist, selbstredend in weiterer Folge einen 404.
Also /baz/ gibt es 100%ig. Selbst mit
RewriteRule ^/foo/ / [R=301]
bekomme ich 404.
****
So funktioniert es (fast) wie gewünscht:
redirect 301 /foo/ http://www.example.com/baz/
Allerdingsn nur bei einem Aufruf von http://www.example.com/foo/
Bei einem aufruf von http://www.example.com/foo/index.html lande ich wie geasgt auf http://www.example.com/baz/index.html
Ja. Nur was soll ich bei 404 genau gucken?
Du sollst dir ansehen, wie die HTTP-Kommunikation aussieht - ich glaube nicht, dass da einfach 404 BAM OIDA daherkommt sonder sich zwischen dir und dem Server noch etwas anderes abspielt :)
Also /baz/ gibt es 100%ig. Selbst mit
RewriteRule ^/foo/ / [R=301]
bekomme ich 404.
Bist du sicher, dass die Regel überhaupt ausgeführt wird?
Sprich, hast du geprüft ob die Rewrite-Engine überhaupt eingeschaltet ist?
So funktioniert es (fast) wie gewünscht:
redirect 301 /foo/ http://www.example.com/baz/Allerdingsn nur bei einem Aufruf von http://www.example.com/foo/
Bei einem aufruf von http://www.example.com/foo/index.html lande ich wie geasgt auf http://www.example.com/baz/index.html
Works as designed, die entsprechenden Stellen in der Doku hab ich dir ja verlinkt - ich sagte ja, Redirect und RedirectMatch unterschieden sich in diesem Punkt.
hi,
RewriteRule ^/foo/ /baz/ [R=301]
Rufe ich nun www.example.com/foo/ auf, erhalte ich eine 404-Fehlermeldung
Da hilft das Error-Log. Unabhängig davon, an ^/foo/ kann der erste slash entfallen, so wie ich heute morgen schon schrieb. Im Error log findest Du den Weg zur Lösung, da steht genau drin, was requestet wurde und was nicht gefunden wurde. Obenstehende Regel kannst Du dann selbst um die entsprechenden Ausdrücke ergänzen (.html oder was Du willst).
Hotti
hi,
RewriteRule ^/foo/ /baz/ [R=301]
Rufe ich nun www.example.com/foo/ auf, erhalte ich eine 404-Fehlermeldung
Achja, für den DirectoryIndex brauchst Du eine extra Zeile ;-)
Horst Haselwurst