Redirekt mit reg. Ausdruck
mack
- programmiertechnik
Hallo,
ich möchte eine Seite der Art
www.foo.de/dir.htm?irgendwas
umleiten in
www.foo.de/index.htm.
Ich habe es auf verschiedene Arten versucht, komme aber nicht dahinter.
Z.B.
RedirectMatch ^.*.htm.+$ http://www.foo.de/index.htm
Es liegt wohl an dem ?, denn wenn ich
www.foo.de/dir.htmXirgendwas
angebe, funktioniert es.
hi,
ich möchte eine Seite der Art
www.foo.de/dir.htm?irgendwas
umleiten in
www.foo.de/index.htm.
Ich habe es auf verschiedene Arten versucht, komme aber nicht dahinter.
Z.B.
RedirectMatch ^.*.htm.+$ http://www.foo.de/index.htm
RedirectMatch betrachtet nur den REQUEST_URI der Ressource, und nicht den Query-String.
Es liegt wohl an dem ?, denn wenn ich
www.foo.de/dir.htmXirgendwas
angebe, funktioniert es.
Natürlich, weil dann dir.htmXirgendwas der REQUEST_URI ist.
Wenn du dir.htm umleiten möchtest, egal was im Query-String steht - dann mach das auch.
RedirectMatch ^.*.htm$ http://www.foo.de/index.htm
Aber warum willst du eigentlich alle derartigen Ressourcen auf die Indexseite umleiten?
gruß,
wahsaga
Hallo
Wenn du dir.htm umleiten möchtest, egal was im Query-String steht - dann mach das auch.
RedirectMatch ^.*.htm$ http://www.foo.de/index.htm
Aber warum willst du eigentlich alle derartigen Ressourcen auf die Indexseite umleiten?
In den Suchmaschinen hängen noch viele Adressen der Art
http://www.foo.de/dir.htm?parm1
http://www.foo.de/ind.htm?parm2
http://www.foo.de/ind.htm?kond.htm
....
Nach der Reorganisation meiner Homepages will ich alle umgeleitet haben auf
http://www.foo.de/index.htm
aber ohne die Parameterangaben ?....., die jetzt überflüssig sind und stören.
hi,
In den Suchmaschinen hängen noch viele Adressen der Art
http://www.foo.de/dir.htm?parm1
http://www.foo.de/ind.htm?parm2
http://www.foo.de/ind.htm?kond.htm
....
Nach der Reorganisation meiner Homepages will ich alle umgeleitet haben auf
http://www.foo.de/index.htm
Warum?
Enthält die Indexseite denn jetzt wirklich alle Informationen, die vorher auf den einzelnen Ressourcen untergebracht waren?
gruß,
wahsaga
Hallo,
Warum?
Enthält die Indexseite denn jetzt wirklich alle Informationen, die vorher auf den einzelnen Ressourcen untergebracht waren?
Die Indexseite enthält jetzt übersichtlich einen Verweis auf die einzelnen Informationen.
Gruß mack
hi,
Enthält die Indexseite denn jetzt wirklich alle Informationen, die vorher auf den einzelnen Ressourcen untergebracht waren?
Die Indexseite enthält jetzt übersichtlich einen Verweis auf die einzelnen Informationen.
Warum sorgst du dann nicht gleich dafür, dass ich von "alt" auf "neu" weitergeleitet werde, ohne diesen unnötigen Zwischenschritt machen zu müssen?
gruß,
wahsaga
Hallo,
Warum sorgst du dann nicht gleich dafür, dass ich von "alt" auf "neu" weitergeleitet werde, ohne diesen unnötigen Zwischenschritt machen zu müssen?
Das möcht ich ja gerne, wenn man mir sagen/schreiben könnte,
wie ich
www.foo.de/aaaa.htm?xxx.htm umleite auf www.foo.de/xxxneu.htm,
www.foo.de/aaaa.htm?yyy.htm umleite auf www.foo.de/yyyneu.htm
ohne die jeweils anhängenden ?xxx und ?yyy
Das einzige Problem, was ich habe, sind nur diese anhängenden Parameter, die ich nicht wegbekomme.
Gruß
mack
Hell-O!
Das möcht ich ja gerne, wenn man mir sagen/schreiben könnte,
wie ich
www.foo.de/aaaa.htm?xxx.htm umleite auf www.foo.de/xxxneu.htm,
www.foo.de/aaaa.htm?yyy.htm umleite auf www.foo.de/yyyneu.htm
Also sollen die Parameter in der Tat erhalten bleiben, nur als Präfix der neuen Seite?
Das einzige Problem, was ich habe, sind nur diese anhängenden Parameter, die ich nicht wegbekomme.
Du benötigst sie doch nunmal, wenn ich dein obiges Beispiel richtig deute. Wenn ich weiter deine Postings deute, verwendest du mod_alias, oder? Dann wäre dies, wie wahsaga schon andeutete, das falsche Werkzeug und du mit mod_rewrite besser bedient (so verfügbar).
Siechfred
Hallo,
Du benötigst sie doch nunmal, wenn ich dein obiges Beispiel richtig deute. Wenn ich weiter deine Postings deute, verwendest du mod_alias, oder? Dann wäre dies, wie wahsaga schon andeutete, das falsche Werkzeug und du mit mod_rewrite besser bedient (so verfügbar).
ob ich mod_alias oder etwas anderes verwende, weiß ich nicht (Schande über mich), aber ich habe einfach ein Beispiel aus dem Internet genommen.
Ich habe in meiner .htaccess die betreffenden redirects stehen.
Redirect permanent ...
RedirectMatch permanent ...
Geht daraus hervor, was für eine Art Umleitung es ist?
Nochmal mein Problem:
Über die Zeit haben sich im Internet -zig Verweise angesammelt auf immer wieder (in der Struktur) veränderte Homepages von mir.
In den meisten Fällen kann ich anhand der Parameter zuordnen, wie die neue Seite heißen soll.
www.foo.de/dir.htm?xxx.htm ==> www.foo.de/xxx.htm aber ohne (?xxx)
In anderen Fällen ist keine Zuordnung möglich, da möchte ich einfach auf meine Startseite www.foo.de/index.htm (ohne ?yyy) umleiten.
Gruß
mack
hi,
ob ich mod_alias oder etwas anderes verwende, weiß ich nicht
Redirect(Match) wird von mod_alias bereitgestellt.
Das mod_rewrite dein Problem besser lösen kann, wurde bereits erwähnt - also informiere dich mal darüber.
gruß,
wahsaga
Hi,
Das mod_rewrite dein Problem besser lösen kann, wurde bereits erwähnt - also informiere dich mal darüber.
Wenn ich das mod_rewrite verwende,
(Inhalt der .htaccess:
RewriteEngine On
RewriteRule ... )
bringt mein lokaler Apache-Server:
.htaccess: Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration
Weiß zufällig jemand, woran das liegen könnte.
Hi all,
RewriteRule funktioniert!
Aber da bleibt ja die alte Adresse erhalten.
Ist dies nicht auch problematisch?
Was ist denn im Hinblick auf die Suchmaschinen sinnvoll?
Gruß
mack
hi,
RewriteRule funktioniert!
Aber da bleibt ja die alte Adresse erhalten.
Nur, wenn du das so willst.
gruß,
wahsaga
Hi,
Nach der Reorganisation meiner Homepages will ich alle umgeleitet haben auf
es ist irrelevant, was Du willst. Wenn es die Ressource nicht mehr gibt, ist ein 404 die *einzig* sinnvolle Antwort. Gibt es sie noch, aber an anderer Stelle, ist ein 301 zur neuen URI erforderlich.
http://www.foo.de/index.htm
Augenscheinlich wollte der User hier nicht hin. Oder? Also existiert auch kein Grund, ihn mit dieser Seite zu belästigen.
Cheatah
Hallo,
es ist irrelevant, was Du willst. Wenn es die Ressource nicht mehr gibt, ist ein 404 die *einzig* sinnvolle Antwort. Gibt es sie noch, aber an anderer Stelle, ist ein 301 zur neuen URI erforderlich.
Ja das will ich ja, aber ohne den unnützen Ballast, der von der früheren frametechnik kam.
http://www.foo.de/index.htm
Augenscheinlich wollte der User hier nicht hin. Oder? Also existiert auch kein Grund, ihn mit dieser Seite zu belästigen.
Er wollte dorthin, denn so waren früher die Adressen.
Hi,
es ist irrelevant, was Du willst. Wenn es die Ressource nicht mehr gibt, ist ein 404 die *einzig* sinnvolle Antwort. Gibt es sie noch, aber an anderer Stelle, ist ein 301 zur neuen URI erforderlich.
Ja das will ich ja, aber ohne den unnützen Ballast, der von der früheren frametechnik kam.
offenbar willst Du alle auf die selbe Seite umleiten, anstatt auf die neue URI derjenigen Seite, die der User angefordert hatte.
http://www.foo.de/index.htm
Augenscheinlich wollte der User hier nicht hin. Oder? Also existiert auch kein Grund, ihn mit dieser Seite zu belästigen.
Er wollte dorthin, denn so waren früher die Adressen.
Du hattest früher unter dir.htm?parm1, ind.htm?parm2 und ind.htm?kond.htm die selben Inhalte ausgeliefert?
Cheatah
Hallo,
offenbar willst Du alle auf die selbe Seite umleiten, anstatt auf die neue URI derjenigen Seite, die der User angefordert hatte.
soweit zuordenbar auf entsprechende neue Seiten, falls nicht auf die Startseite (siehe Antwort an Siechfred).
Gruß
mack
hi,
offenbar willst Du alle auf die selbe Seite umleiten, anstatt auf die neue URI derjenigen Seite, die der User angefordert hatte.
soweit zuordenbar auf entsprechende neue Seiten,
OK.
falls nicht auf die Startseite (siehe Antwort an Siechfred).
Nicht OK.
Wie dir bereits gesagt wurde, wären 404 File Not Found oder 410 Gone die Reaktionen, die HTTP für so einen Fall vorsieht.
Auf die mit diesen Statusantworten ausgelieferten Fehlerdokumente kannst du natürlich gerne einen Link packen, der zurück auf deine Startseite führt.
gruß,
wahsaga
Hallo,
Wie dir bereits gesagt wurde, wären 404 File Not Found oder 410 Gone die Reaktionen, die HTTP für so einen Fall vorsieht.
Auf die mit diesen Statusantworten ausgelieferten Fehlerdokumente kannst du natürlich gerne einen Link packen, der zurück auf deine Startseite führt.
Jetzt tut sich leider ein neues Loch bei mir auf.
Wenn die Seite im Internet nicht gefunden wird, kommt normalerweise vom Browser eine Seite mit dem Text 404 ....
Wann kommt dann 410?
Wie kann ich die Standardseite ersetzen durch eine eigene?
Hallo mack!
Wann kommt dann 410?
Wenn der Server dem Client mitteilt, dass eine Seite nicht mehr existiert. Und damit es das tut, kann man in der .htaccess folgendes schreiben:
Redirect Gone /dir/page.html
Wie kann ich die Standardseite ersetzen durch eine eigene?
Das geht auch über die .htaccess:
ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
ErrorDocument 410 /410.html
ErrorDocument 500 /500.html
Viele Grüße aus Frankfurt/Main,
Patrick
Hallo Patrick
Wann kommt dann 410?
Wenn der Server dem Client mitteilt, dass eine Seite nicht mehr existiert. Und damit es das tut, kann man in der .htaccess folgendes schreiben:
Ich dachte, dann kommt
404 File Not Found?
"Gone" heißt doch auch verschwunden, das wäre doch dann das gleiche wie File not found?
In welchem Falle kommt dann das eine, wann das andere?
hi,
"Gone" heißt doch auch verschwunden, das wäre doch dann das gleiche wie File not found?
In welchem Falle kommt dann das eine, wann das andere?
410 Gone ist für Ressourcen, die mal vorhanden waren, jetzt aber nicht mehr, und für die es keinen Ersatz gibt.
404 File not Found ist für den Rest - für Vertipper, fehlerhafte Verlinkungen und sonstige Anfragen, zu denen es noch nie eine passende Ressource gegeben hat.
gruß,
wahsaga
Hallo mack!
Um wahsaga nur mit einem Beispiel zu ergänzen...
Wann kommt dann 410?
Nehmen wir an, Du _hattest_ eine Seite mit dem Pfad (vom Root ausgehend) /dir/page_1.html. Du hast sie aber nach einer Restrukturierung Deines kompletten Angebots gelöscht. Dann empfiehlt sich es, es sowohl Benutzern als auch Suchmaschinen (bei denen sie vielleicht noch gelistet ist), mitzuteilen. Das geschieht durch einen Redirect Gone /dir/page_1.html - Eintrag in der .htaccess.
Ich dachte, dann kommt
404 File Not Found?
410 = Gone (existiert nicht mehr - und nur das)
404 = Ressource nicht gefunden, warum auch immer, wie wahsaga schon sagte, durch Vertipper des Besuchers bei der Adressenangaben oder weiß der Geier.
Viele Grüße aus Frankfurt/Main,
Patrick
Hallo wahsaga und Patrick,
wenn ich Euch richtig verstanden habe,
zeige ich in beiden Fällen (410 und 404) jeweils eine Seite mit dem entsprechenden Hinweis.
1. Im Falle 410 der Hinweis, dass die Seite eine neue Adresse hat.
Ist es in diesem Falle sinnvoll, nach einer bestimmten Wartezeit(
? Sekunden) automatisch zu der neuen Seite weiterzuleiten?
Warum aber in diesem Falle nicht direkt eine Weiterleitung?
2. Im Falle 404 der Hinweis, dass die Seite nicht existiert.
Ist es in diesem Falle sinnvoll, einen Link zur Startseite
anzubieten?
Eine autom. Weiterleitung nach ? Sekunden wohl in diesem Falle
nicht sinnvoll?
Gruß vom Bodensee
mack
Hallo,
wenn ich Euch richtig verstanden habe, zeige ich in beiden Fällen (410 und 404) jeweils eine Seite mit dem entsprechenden Hinweis.
kannst du machen, ja.
- Im Falle 410 der Hinweis, dass die Seite eine neue Adresse hat.
Nein, gerade nicht! Der Status 410 besagt doch, dass die gewünschte Ressource NICHT MEHR verfügbar ist. Wenn unter einer anderen Adresse die geforderte (oder eine vergleichbare) Information steht, solltest du mit 301 zur neuen Adresse weiterleiten. Beim 410er gibt's nichts mehr weiterzuleiten. Es sei denn, du hast eine Zeitmaschine erfunden und kannst in die Vergangenheit umleiten, als die Ressource noch existierte.
Ist es in diesem Falle sinnvoll, nach einer bestimmten Wartezeit automatisch zu der neuen Seite weiterzuleiten?
Nein. Wenn du eine alternative Adresse anbietest, dann leite entweder sofort weiter (per 301), oder zeige eine Fehlerseite, die einen Link enthält, der den User dorthin schickt, wo du ein Ersatzangebot hast.
Abgesehen davon kannst du nicht vorhersehen, ob deine verzögerte Weiterleitung (wie denn? per meta-refresh? Oder, noch schlimmer, mit Javascript?) beim Besucher überhaupt funktionieren wird.
Warum aber in diesem Falle nicht direkt eine Weiterleitung?
Weil's beim 410 per definitionem keine Weiterleitung geben kann.
- Im Falle 404 der Hinweis, dass die Seite nicht existiert.
Ist es in diesem Falle sinnvoll, einen Link zur Startseite anzubieten?
Warum nicht. Oder -falls vorhanden- auf eine Sitemap.
Eine autom. Weiterleitung nach ? Sekunden wohl in diesem Falle nicht sinnvoll?
Nein, bitte nicht!
Ciao,
Martin
Hallo mack!
Martin hat Dir bereits alles erklärt. Schau dir meine Error-Seiten alle an, vielleicht fällt Dir der Unterschied besser auf:
Von der 404.shtml aus kannst du mit etwas Geklicke alle anderen erreichen, die habe ich verlinkt.
Dass der direkte Auruf wie hier über diesen geposteten Link zu einem Joke führt, tut nichts zur Sache, dass die 404.shtml eine richtige "404" ist, wenn eine Ressource nicht existiert ;)
Viele Grüße aus Frankfurt/Main,
Patrick
Hallo,
offenbar willst Du alle auf die selbe Seite umleiten, anstatt auf die neue URI derjenigen Seite, die der User angefordert hatte.
soweit zuordenbar auf entsprechende neue Seiten,
OK.
falls nicht auf die Startseite (siehe Antwort an Siechfred).
Nicht OK.
Wie dir bereits gesagt wurde, wären 404 File Not Found oder 410 Gone die Reaktionen, die HTTP für so einen Fall vorsieht.
Warum nicht ok?
Ich hatte zwei Seiten mit rel. wenig Infos, die eine in Englisch, die andere in Deutsch. Beide habe ich in eine zweisprachige Seite zusammengefasst.
Auf diese leite ich um, wenn eine der ursprünglichen Seiten angeklickt wird. Was ist daran nicht OK.
Vielleicht hat ja mack ähnliche Konstellationen?
Gruß
Jessi
hi,
Wenn es die Ressource nicht mehr gibt, ist ein 404 die *einzig* sinnvolle Antwort.
Was ist mit 410?
gruß,
wahsaga
Hi,
Wenn es die Ressource nicht mehr gibt, ist ein 404 die *einzig* sinnvolle Antwort.
Was ist mit 410?
stimmt, das ist natürlich ebenfalls sinnvoll. Sorry & danke.
Cheatah
Hallo,
ich hoffe der Thread wird noch beachtet.
Wenn es die Ressource nicht mehr gibt, ist ein 404 die *einzig* sinnvolle Antwort.
Gibt es sie noch, aber an anderer Stelle, ist ein 301 zur neuen URI erforderlich.
Wie wird der 301 erzeugt, der Browser weiß doch nicht, dass es die Seite nochmal gibt?
Muss ich dann die alte Seite, die ich eigentlich gelöscht hatte, wieder aufleben lassen und mit einem HTTP-Redirect versehen?
Gruß von
mack
hi,
Wie wird der 301 erzeugt, der Browser weiß doch nicht, dass es die Seite nochmal gibt?
Nein, er fordert sie nur an - und bekommt darauf die Antwort 301 Moved Permanently - "hey, das Ding liegt jetzt dauerhaft unter einer anderen Adresse, also frage bitte nach dieser" (letzteres geschieht durch eine zusätzliche Location-Angabe, die die neue Adresse mitteilt).
Muss ich dann die alte Seite, die ich eigentlich gelöscht hatte, wieder aufleben lassen und mit einem HTTP-Redirect versehen?
Nein, dazu muss keine physische Datei vorhanden sein.
Auf Redirect/RedirectMatch warst du doch direkt zu Anfang schon gestossen - und die machen ihre Arbeit, noch bevor der Server versucht, zur angeforderten Ressource eine passende Datei zu finden.
"OK, hier steht, ich soll dem Browser sagen, er soll nach der neuen Adresse fragen - jau, dann mach ich das mal, nach einer Datei muss ich dann jetzt nicht mehr suchen."
gruß,
wahsaga
Hallo,
ich habe jetzt noch ein Problem mit dem Redirect.
Wenn ich angebe
"RewriteRule alt.htm /de/neu.shtml"
wird korrekt umgeleitet auf die neue Seite.
Wenn ich aber angebe
"RewriteRule alt.htm /de/neu.shtml [R]"
dann kommt die Fehlermeldung
Zugriff verweigert Error 403
und im Log:
(20023)The given path was above the root path: Cannot map GET /E:/homepages/foo/de/neu.shtml HTTP/1.1 to file
Und noch eine Frage:
Wißt Ihr, ob man in der Condition der rewrite-rule die Sprache des Browsers abfragen kann?
Gruß
mack
hi,
Wenn ich angebe
"RewriteRule alt.htm /de/neu.shtml"
wird korrekt umgeleitet auf die neue Seite.
Ja, dann wird intern umgeschrieben.
Abgesehen davon machst du damit aber noch den gleichen Fehler, den du der Dokumentation in ankreidest (oder ist das in diesem Falle Absicht?)
Wenn ich aber angebe
"RewriteRule alt.htm /de/neu.shtml [R]"
dann kommt die Fehlermeldung
Zugriff verweigert Error 403
und im Log:
(20023)The given path was above the root path: Cannot map GET /E:/homepages/foo/de/neu.shtml HTTP/1.1 to file
Mit dem Flag [R] fordert du einen expliziten Redirect an.
Der erfordert aber einen absoluten URL - du willst also auf http://{example.com}/de/neu.shtml umleiten.
Aber warum bemühst du dafür jetzt überhaupt die RewriteEngine?
Du hattest doch anfangs Redirect(Match), wieso bleibst du nicht dabei? Das sollte doch dafür ausreichen.
Wißt Ihr, ob man in der Condition der rewrite-rule die Sprache des Browsers abfragen kann?
Falls du damit die Sprachen(!) meinst, die der Benutzer in seinem Browser als die eingestellt hat, in denen er Dokumente bevorzugt erhalten möchte - ja. Allerdings solltest du beachten, dass der Accept-Language-Header nicht nur eine Sprachkennung enthalten muss, sondern ggf. mehrere, und mit "Faktor".
gruß,
wahsaga
Hallo
Abgesehen davon machst du damit aber noch den gleichen Fehler, den du der Dokumentation in ankreidest (oder ist das in diesem Falle Absicht?)
Absicht, da ich zu dem Zeitpunkt noch nicht wußte, ob es ein Fehler ist.
Mit dem Flag [R] fordert du einen expliziten Redirect an.
Der erfordert aber einen absoluten URL - du willst also auf http://{example.com}/de/neu.shtml umleiten.
Super! Danke.
Aber warum bemühst du dafür jetzt überhaupt die RewriteEngine?
Du hattest doch anfangs Redirect(Match), wieso bleibst du nicht dabei? Das sollte doch dafür ausreichen.
Dafür schon, aber wir hatten andere Fälle diskutiert, wo das nicht geht und mir mod_rewrite nahegelegt wurde.
Falls du damit die Sprachen(!) meinst, die der Benutzer in seinem Browser als die eingestellt hat, in denen er Dokumente bevorzugt erhalten möchte - ja. Allerdings solltest du beachten, dass der Accept-Language-Header nicht nur eine Sprachkennung enthalten muss, sondern ggf. mehrere, und mit "Faktor".
Nochmals Danke
Ich nehme an, den Faktor kann man nicht abfragen, aber erhält man alle entspr. Header-Einträge? Dann könnte man dem Anwender möglicherweise eine Auswahl aus den angegebenen (und bei mir realisierten) Sprachen anbieten?
Gruß
mack