Weiterleitung bestimmter Domains und/oder bestimmter Seiten
Johnson
- webserver
0
Der Martin
0 Johnson
Hallo zusammen,
ich muss zwei Domains auf eine Standarddomain umleiten. Ebenso wurden zwei Seiten umbenannt, die ebenfalls umgeleitet werden müssen.
z.B.:
http://www.zusatz-domain1.de => http://www.standard-domain.de
http://www.zusatz-domain2.de => http://www.standard-domain.de
zusätzlich müssen diese Seiten umgeleitet werden:
kontakt.html => kontakt.php
instructions.html => anweisungen.html
Die .htaccess sieht momentan wie folgt aus:
RewriteEngine on
# redirect any other domain to the default domain
RewriteCond %{HTTP_HOST} !^www.standard-domain.de
RewriteRule ^(.*)$ http://www.standard-domain.de/$1 [R=301, N]
# redirect reordered or renamed content
RewriteRule (.*)kontakt.html$ $1kontakt.php [R=301]
RewriteRule (.*)instructions.html$ $1anweisungen.html [R=301]
Mit Hilfe des htaccess testers teste ich die verschiedenen Fälle dann durch.
Das Problem, vor dem ich stehe ist nun folgendes:
Die URL www.standard-domain.de/kontakt.html wird brav in www.standard-domain.de/kontakt.php umgeschrieben.
Die URL www.zusatz-domain1.de/kontakt.html wird aber lediglich in www.standard-domain.de/kontakt.html umgeschrieben.
Wie sage ich in der htaccess datei, dass er mit der URL-Modifizierung nicht bei der ersten Regel aussteigen soll? Ich dachte, dass das mit dem Parameter "N" ginge:
Next round. Re-run the rewriting process from the beginning by applying again the first rule. However, this time the input URL is not the one originally requested by the client but the output of the last applied rule. This option should be used with care to avoid creating an infinite loop.
Wäre echt dankbar, für einen Tip, der mir den Knoten im Hirn löst.
Gruß
Johnson
Hallo,
ich muss zwei Domains auf eine Standarddomain umleiten. Ebenso wurden zwei Seiten umbenannt, die ebenfalls umgeleitet werden müssen.
http://www.zusatz-domain1.de => http://www.standard-domain.de
http://www.zusatz-domain2.de => http://www.standard-domain.de
bitte, bitte ...
kontakt.html => kontakt.php
instructions.html => anweisungen.html
RewriteEngine on
redirect any other domain to the default domain
RewriteCond %{HTTP_HOST} !^www.standard-domain.de
RewriteRule ^(.*)$ http://www.standard-domain.de/$1 [R=301, N]redirect reordered or renamed content
RewriteRule (.)kontakt.html$ $1kontakt.php [R=301]
RewriteRule (.)instructions.html$ $1anweisungen.html [R=301]
Die letzten beiden Rules würde ich einfacher formulieren:
RewriteRule /kontakt.html$ /kontakt.php [R=301]
Oder willst du auch in allen Unterverzeichnissen alle kontakt.html (falls vorhanden) nach kontakt.php umleiten?
> Das Problem, vor dem ich stehe ist nun folgendes:
> Die URL www.standard-domain.de/kontakt.html wird brav in www.standard-domain.de/kontakt.php umgeschrieben.
Okay, klar.
> Die URL www.zusatz-domain1.de/kontakt.html wird aber lediglich in www.standard-domain.de/kontakt.html umgeschrieben.
Das ist mir im Moment nicht klar.
> Wie sage ich in der htaccess datei, dass er ...
Wer ist "er"?
> mit der URL-Modifizierung nicht bei der ersten Regel aussteigen soll?
Ich würde es genau umgekehrt angehen: Darauf bauen, \*dass\* die Bearbeitung nach der ersten Regel abbricht, die ja einen Redirect auslöst. Die Domain-internen Umleitungen werden dann ggf. in der zweiten Runde abgeprüft.
Das hat zwar den Nachteil, dass im ungünstigsten Fall zwei Redirects stattfinden, aber dieser Fall dürfte relativ selten vorkommen, oder?
> Ich dachte, dass das mit dem Parameter "N" ginge:
Ich sehe zwischen dem Redirect und dem N-Flag eher einen Widerspruch und hätte daher eher ein L gesetzt.
Ciao,
Martin
--
They say hard work never killed anyone, but I figure, why take the risk?
(Ronald Reagan, US-Präsident 1981-1989)
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
Hallo,
ich muss zwei Domains auf eine Standarddomain umleiten. Ebenso wurden zwei Seiten umbenannt, die ebenfalls umgeleitet werden müssen.
http://www.zusatz-domain1.de => http://www.standard-domain.de
http://www.zusatz-domain2.de => http://www.standard-domain.debitte, bitte ...
kontakt.html => kontakt.php
instructions.html => anweisungen.html
RewriteEngine on
redirect any other domain to the default domain
RewriteCond %{HTTP_HOST} !^www.standard-domain.de
RewriteRule ^(.*)$ http://www.standard-domain.de/$1 [R=301, N]redirect reordered or renamed content
RewriteRule (.)kontakt.html$ $1kontakt.php [R=301]
RewriteRule (.)instructions.html$ $1anweisungen.html [R=301]
>
> Die letzten beiden Rules würde ich einfacher formulieren:
> RewriteRule /kontakt.html$ /kontakt.php [R=301]
> Oder willst du auch in allen Unterverzeichnissen alle kontakt.html (falls vorhanden) nach kontakt.php umleiten?
Hm. Rischtisch. Das wäre einfacher. ^^ Merci
>
> > Das Problem, vor dem ich stehe ist nun folgendes:
> > Die URL www.standard-domain.de/kontakt.html wird brav in www.standard-domain.de/kontakt.php umgeschrieben.
>
> Okay, klar.
>
> > Die URL www.zusatz-domain1.de/kontakt.html wird aber lediglich in www.standard-domain.de/kontakt.html umgeschrieben.
>
> Das ist mir im Moment nicht klar.
Hier hätten zwei sachen passieren müssen:
1\. die Domain hätte auf die standar-domain.de geändert werden müssen
2\. die Seite kontakt.html auf komtakt.php
Da in meiner Version der .htaccess aber bereits nach der ersten Regel, welche die domain "ändert", ein Redirect durchgeführt wird, fallen alle weitern Regeln unter den Tisch. Aus diesem Grund gab ich das Flag "N" an.
>
> > Wie sage ich in der htaccess datei, dass er ...
>
> Wer ist "er"?
^^ Der kleine Mann, der die Adressen nach den Regeln umschreibt ;-D Sry
>
> > mit der URL-Modifizierung nicht bei der ersten Regel aussteigen soll?
>
> Ich würde es genau umgekehrt angehen: Darauf bauen, \*dass\* die Bearbeitung nach der ersten Regel abbricht, die ja einen Redirect auslöst. Die Domain-internen Umleitungen werden dann ggf. in der zweiten Runde abgeprüft.
> Das hat zwar den Nachteil, dass im ungünstigsten Fall zwei Redirects stattfinden, aber dieser Fall dürfte relativ selten vorkommen, oder?
Ok. Dem stimme ich zu. Für mich war es nur unlogisch, warum bei einem Redirect einfach Schluss sein sollte. Dann habe ich echt noch nicht verstanden, wie diese Datei interpretiert bzw abgearbeitet wird.
>
> > Ich dachte, dass das mit dem Parameter "N" ginge:
>
> Ich sehe zwischen dem Redirect und dem N-Flag eher einen Widerspruch und hätte daher eher ein L gesetzt.
>
> Ciao,
> Martin
>
Das N besagt ja lediglich, dass er den ganzen Prozess nochmals mit dem Ergebnis der Regel durchführen soll.
In meinem Fall (www.zusatz-domain.de/kontakt.html)
1\. Die Domain prüfen
2\. Die Domain umstellen und Prozess mit umgestellter nochmal ausführen
3\. Die Domain prüfen
4\. Auf kontakt.html prüfen
5\. kontakt.html auf kontakt.php weiterleiten
Und da ist der Hund begraben. Scheinbar hab ich den Gedankenfehler, dass ich zuerst anham, bei einer Weiterleitung würde die htaccess mit der neuen Domain nochmals ausgeführt werden. Bzw. dass es mit dem Flag "N" möglich sei, anzugeben, mit der nächsten Überprüfung fortzufahren.
Ergo:
Ich müsste dann also die Regeln so umstellen dass:
1\. überprüft wird ob was auf kontakt.html reinkommt und auf www.standard-domain.de/kontakt.php weiterleiten, egal was für eine Domain angegeben wurde.
2\. die gleiche Überprüfung mit instructions.html analog zu kontakt.html
3\. Für alles was jetzt noch nicht weitergeleitet wurde, überprüfen, ob die standard-domain verwendet wurde und falls nicht auf diese umleiten.
Besten Dank für die Anstoß ^^
Hi,
Hallo,
[...]
Die letzten beiden Rules würde ich einfacher formulieren:
RewriteRule /kontakt.html$ /kontakt.php [R=301]
Oder willst du auch in allen Unterverzeichnissen alle kontakt.html (falls vorhanden) nach kontakt.php umleiten?
Hm. Rischtisch. Das wäre einfacher. ^^ Merci
und nächstes Mal bitte ohne TOFU. Danke.
Die URL www.zusatz-domain1.de/kontakt.html wird aber lediglich in www.standard-domain.de/kontakt.html umgeschrieben.
Das ist mir im Moment nicht klar.
Hier hätten zwei sachen passieren müssen:
- die Domain hätte auf die standar-domain.de geändert werden müssen
- die Seite kontakt.html auf komtakt.php
Ja, aber Punkt 2. erst beim nächsten Durchlauf, dazwischen erfolgt ja zunächst der Redirect auf die neue Domain.
Da in meiner Version der .htaccess aber bereits nach der ersten Regel, welche die domain "ändert", ein Redirect durchgeführt wird, fallen alle weitern Regeln unter den Tisch. Aus diesem Grund gab ich das Flag "N" an.
Und ich vermute, das wird wegen des verlangten Redirects gar nicht beachtet. Das steht zwar nicht explizit in der Doku, erscheint mir aber logisch.
Das hat zwar den Nachteil, dass im ungünstigsten Fall zwei Redirects stattfinden, aber dieser Fall dürfte relativ selten vorkommen, oder?
Ok. Dem stimme ich zu. Für mich war es nur unlogisch, warum bei einem Redirect einfach Schluss sein sollte.
Weil dadurch der anfragende Client schon die Antwort bekommt: Frag nochmal woanders nach!
In deinem Fall landet er beim Folgerequest wieder auf demselben Server, aber unter anderer Domain. Im allgemeinen Fall müsste man hier davon ausgehen, dass der Folgerequest bei einem ganz anderen Server aufschlägt.
In meinem Fall (www.zusatz-domain.de/kontakt.html)
- Die Domain prüfen
- Die Domain umstellen und Prozess mit umgestellter nochmal ausführen
Und hier möge vielleicht ein intimer Kenner von mod_rewrite aufgreifen: Werden nachfolgende Rules noch bearbeitet, wenn eine in einen Redirect mündet? Wird das N-Flag bei einem gleichzeitigen Redirect überhaupt beachtet?
- Die Domain prüfen
- Auf kontakt.html prüfen
- kontakt.html auf kontakt.php weiterleiten
Ansonsten wäre deine Überlegung logisch - nur über die eben formulierten zwei Fragen bin ich mir nicht so ganz im Klaren.
Ich müsste dann also die Regeln so umstellen dass:
- überprüft wird ob was auf kontakt.html reinkommt und auf www.standard-domain.de/kontakt.php weiterleiten, egal was für eine Domain angegeben wurde.
Nein, nur auf /kontakt.php, keinen Hostnamen dabei angeben! Sonst hast du ja ebensogut wie vorher schon einen Redirect, und das Prinzip bleibt dasselbe.
Wobei ... Stillschweigend intern umleiten hätte natürlich zur Folge, dass immer noch /kontakt.html in der Adressleiste steht, der Client also die Änderung gar nicht mitbekommt. Kann gewünscht sein, vielleicht aber auch nicht.
- die gleiche Überprüfung mit instructions.html analog zu kontakt.html
- Für alles was jetzt noch nicht weitergeleitet wurde, überprüfen, ob die standard-domain verwendet wurde und falls nicht auf diese umleiten.
In der Reihenfolge könnte es wie gewünscht funktionieren. Testen! :-)
Ciao,
Martin
Ok. Jetzt nach TOFU ^^
Ich habe auf meinem XAMPP jetzt ersteinmal einen VirtaulHost für dieses Projekt angelegt, um hier mit der htaccess Datei ordentlich arbeiten zu können. Hier war die Schwierigkeit, dass die hosts-Datei nicht einer qualifizierten Domain wie "example.local" oder "www.example.local" berücksichtigt wurde, sondern direkt vom Proxy aufgelöst werden sollte. Muss man auch erst mal wissen, wenn man nicht so in den Protokollen drinsteckt. ;-)
Vielen Dank für die Tipps Martin! Werde schauen, ob ich das Ding zum fliegen kriege, und mich noch etwas tiefer in mod_rewrite einarbeiten.
Was sich bei mir immer noch nicht wirklich klargestellt hat ist, dass das R-Flag der RewriteRule Funktion nicht so ganz so zu reagieren scheint, wie es die Doku des R-Flags auf den ersten Blick erwarten lässt.
Zitat:
You will almost always want to use [R] in conjunction with [L] (that is, use [R,L]) because on its own, the [R] flag prepends http://thishost[:thisport] to the URI, but then passes this on to the next rule in the ruleset, which can often result in 'Invalid URI in request' warnings.
Hier wird ja gesagt, dass diese Flag [R] nur mit im Zusammenspiel mit dem Flag [L] sofort aussteigt.
Ich muss dazu gestehen, dass ich das alles bisher über diesen htaccess tester getestet habe und hier nicht 100%ig darauf bauen kann, das diese die Regeln regelkonform interpretiert. Hnz!
Falls ich es hinbekomme, dann werd ich die Lösung noch hier reinstellen. Vielleicht hifts dem einen oder anderen ja noch. ;-)
Eine schöne Restwoche wünsche ich noch!
Gruß
Johnson
=============================================================
Hi,
Hallo,
[...]
Die letzten beiden Rules würde ich einfacher formulieren:
RewriteRule /kontakt.html$ /kontakt.php [R=301]
Oder willst du auch in allen Unterverzeichnissen alle kontakt.html (falls vorhanden) nach kontakt.php umleiten?
Hm. Rischtisch. Das wäre einfacher. ^^ Merciund nächstes Mal bitte ohne TOFU. Danke.
Die URL www.zusatz-domain1.de/kontakt.html wird aber lediglich in www.standard-domain.de/kontakt.html umgeschrieben.
Das ist mir im Moment nicht klar.
Hier hätten zwei sachen passieren müssen:
- die Domain hätte auf die standar-domain.de geändert werden müssen
- die Seite kontakt.html auf komtakt.php
Ja, aber Punkt 2. erst beim nächsten Durchlauf, dazwischen erfolgt ja zunächst der Redirect auf die neue Domain.
Da in meiner Version der .htaccess aber bereits nach der ersten Regel, welche die domain "ändert", ein Redirect durchgeführt wird, fallen alle weitern Regeln unter den Tisch. Aus diesem Grund gab ich das Flag "N" an.
Und ich vermute, das wird wegen des verlangten Redirects gar nicht beachtet. Das steht zwar nicht explizit in der Doku, erscheint mir aber logisch.
Das hat zwar den Nachteil, dass im ungünstigsten Fall zwei Redirects stattfinden, aber dieser Fall dürfte relativ selten vorkommen, oder?
Ok. Dem stimme ich zu. Für mich war es nur unlogisch, warum bei einem Redirect einfach Schluss sein sollte.Weil dadurch der anfragende Client schon die Antwort bekommt: Frag nochmal woanders nach!
In deinem Fall landet er beim Folgerequest wieder auf demselben Server, aber unter anderer Domain. Im allgemeinen Fall müsste man hier davon ausgehen, dass der Folgerequest bei einem ganz anderen Server aufschlägt.In meinem Fall (www.zusatz-domain.de/kontakt.html)
- Die Domain prüfen
- Die Domain umstellen und Prozess mit umgestellter nochmal ausführen
Und hier möge vielleicht ein intimer Kenner von mod_rewrite aufgreifen: Werden nachfolgende Rules noch bearbeitet, wenn eine in einen Redirect mündet? Wird das N-Flag bei einem gleichzeitigen Redirect überhaupt beachtet?
- Die Domain prüfen
- Auf kontakt.html prüfen
- kontakt.html auf kontakt.php weiterleiten
Ansonsten wäre deine Überlegung logisch - nur über die eben formulierten zwei Fragen bin ich mir nicht so ganz im Klaren.
Ich müsste dann also die Regeln so umstellen dass:
- überprüft wird ob was auf kontakt.html reinkommt und auf www.standard-domain.de/kontakt.php weiterleiten, egal was für eine Domain angegeben wurde.
Nein, nur auf /kontakt.php, keinen Hostnamen dabei angeben! Sonst hast du ja ebensogut wie vorher schon einen Redirect, und das Prinzip bleibt dasselbe.
Wobei ... Stillschweigend intern umleiten hätte natürlich zur Folge, dass immer noch /kontakt.html in der Adressleiste steht, der Client also die Änderung gar nicht mitbekommt. Kann gewünscht sein, vielleicht aber auch nicht.
- die gleiche Überprüfung mit instructions.html analog zu kontakt.html
- Für alles was jetzt noch nicht weitergeleitet wurde, überprüfen, ob die standard-domain verwendet wurde und falls nicht auf diese umleiten.
In der Reihenfolge könnte es wie gewünscht funktionieren. Testen! :-)
Ciao,
Martin
Hui! Das ging ja schneller als erwartet :-)
Der Fehler liegt in der (mittlerweile doch nicht mehr so tollen) Seite htaccess tester.
Dort wird ausgegeben, dass bei einem Redirect (RedirectRule in Verbindung mit dem Flag [R]) einfach ausgestiegen wird und alle nachstehenden Regeln und Angaben unter den Tisch fallen würden. Dem ist aber nicht so. Erst in Verbindung mit dem weiteren Flag [L], für "last", würde hier mit der neuen URL ausgestiegen werden.
Berichtigt mich, wenn ich Schmonz erzähle. ^^
die htaccess seiht wie folgt aus:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.example.com
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L,NC]
Redirect 301 /foo.html /bar.php
Redirect 301 /foobar.html /fubar.html
=> Alle Domains, die auf diesen Auftritt zeigen werden auf www.example.com umgeleitet. Auch example.com, bei der hier das "www." fehlt.
=> Im zweiten werden die verschobenen oder umgenannten Seiten weitergeleitet (Redirect 301).
Hai, tut das gut, dass es funzt.
cu
Johnson
=========================================================================
Ok. Jetzt nach TOFU ^^
Ich habe auf meinem XAMPP jetzt ersteinmal einen VirtaulHost für dieses Projekt angelegt, um hier mit der htaccess Datei ordentlich arbeiten zu können. Hier war die Schwierigkeit, dass die hosts-Datei nicht einer qualifizierten Domain wie "example.local" oder "www.example.local" berücksichtigt wurde, sondern direkt vom Proxy aufgelöst werden sollte. Muss man auch erst mal wissen, wenn man nicht so in den Protokollen drinsteckt. ;-)
Vielen Dank für die Tipps Martin! Werde schauen, ob ich das Ding zum fliegen kriege, und mich noch etwas tiefer in mod_rewrite einarbeiten.
Was sich bei mir immer noch nicht wirklich klargestellt hat ist, dass das R-Flag der RewriteRule Funktion nicht so ganz so zu reagieren scheint, wie es die Doku des R-Flags auf den ersten Blick erwarten lässt.
Zitat:
You will almost always want to use [R] in conjunction with [L] (that is, use [R,L]) because on its own, the [R] flag prepends http://thishost[:thisport] to the URI, but then passes this on to the next rule in the ruleset, which can often result in 'Invalid URI in request' warnings.Hier wird ja gesagt, dass diese Flag [R] nur mit im Zusammenspiel mit dem Flag [L] sofort aussteigt.
Ich muss dazu gestehen, dass ich das alles bisher über diesen htaccess tester getestet habe und hier nicht 100%ig darauf bauen kann, das diese die Regeln regelkonform interpretiert. Hnz!Falls ich es hinbekomme, dann werd ich die Lösung noch hier reinstellen. Vielleicht hifts dem einen oder anderen ja noch. ;-)
Eine schöne Restwoche wünsche ich noch!
Gruß
Johnson=============================================================
Hi,
Hallo,
[...]
Die letzten beiden Rules würde ich einfacher formulieren:
RewriteRule /kontakt.html$ /kontakt.php [R=301]
Oder willst du auch in allen Unterverzeichnissen alle kontakt.html (falls vorhanden) nach kontakt.php umleiten?
Hm. Rischtisch. Das wäre einfacher. ^^ Merciund nächstes Mal bitte ohne TOFU. Danke.
Die URL www.zusatz-domain1.de/kontakt.html wird aber lediglich in www.standard-domain.de/kontakt.html umgeschrieben.
Das ist mir im Moment nicht klar.
Hier hätten zwei sachen passieren müssen:
- die Domain hätte auf die standar-domain.de geändert werden müssen
- die Seite kontakt.html auf komtakt.php
Ja, aber Punkt 2. erst beim nächsten Durchlauf, dazwischen erfolgt ja zunächst der Redirect auf die neue Domain.
Da in meiner Version der .htaccess aber bereits nach der ersten Regel, welche die domain "ändert", ein Redirect durchgeführt wird, fallen alle weitern Regeln unter den Tisch. Aus diesem Grund gab ich das Flag "N" an.
Und ich vermute, das wird wegen des verlangten Redirects gar nicht beachtet. Das steht zwar nicht explizit in der Doku, erscheint mir aber logisch.
Das hat zwar den Nachteil, dass im ungünstigsten Fall zwei Redirects stattfinden, aber dieser Fall dürfte relativ selten vorkommen, oder?
Ok. Dem stimme ich zu. Für mich war es nur unlogisch, warum bei einem Redirect einfach Schluss sein sollte.Weil dadurch der anfragende Client schon die Antwort bekommt: Frag nochmal woanders nach!
In deinem Fall landet er beim Folgerequest wieder auf demselben Server, aber unter anderer Domain. Im allgemeinen Fall müsste man hier davon ausgehen, dass der Folgerequest bei einem ganz anderen Server aufschlägt.In meinem Fall (www.zusatz-domain.de/kontakt.html)
- Die Domain prüfen
- Die Domain umstellen und Prozess mit umgestellter nochmal ausführen
Und hier möge vielleicht ein intimer Kenner von mod_rewrite aufgreifen: Werden nachfolgende Rules noch bearbeitet, wenn eine in einen Redirect mündet? Wird das N-Flag bei einem gleichzeitigen Redirect überhaupt beachtet?
- Die Domain prüfen
- Auf kontakt.html prüfen
- kontakt.html auf kontakt.php weiterleiten
Ansonsten wäre deine Überlegung logisch - nur über die eben formulierten zwei Fragen bin ich mir nicht so ganz im Klaren.
Ich müsste dann also die Regeln so umstellen dass:
- überprüft wird ob was auf kontakt.html reinkommt und auf www.standard-domain.de/kontakt.php weiterleiten, egal was für eine Domain angegeben wurde.
Nein, nur auf /kontakt.php, keinen Hostnamen dabei angeben! Sonst hast du ja ebensogut wie vorher schon einen Redirect, und das Prinzip bleibt dasselbe.
Wobei ... Stillschweigend intern umleiten hätte natürlich zur Folge, dass immer noch /kontakt.html in der Adressleiste steht, der Client also die Änderung gar nicht mitbekommt. Kann gewünscht sein, vielleicht aber auch nicht.
- die gleiche Überprüfung mit instructions.html analog zu kontakt.html
- Für alles was jetzt noch nicht weitergeleitet wurde, überprüfen, ob die standard-domain verwendet wurde und falls nicht auf diese umleiten.
In der Reihenfolge könnte es wie gewünscht funktionieren. Testen! :-)
Ciao,
Martin
Hi,
Ok. Jetzt nach TOFU ^^
Wieso machst du es jetzt *immer* *noch* ...?
MfG ChrisB