RewriteRule/reg. Expression
Berthold
- webserver
Hallo,
wie offensichtlich viele Mitleidende habe ich Probleme mit redirect und regul.
Ausdrücken.
Ich möchte folgendes erreichen.
Die Seite www.foo.com und die Seite foo.com sollen umgeleitet werden auf www.bar.com/foo
Die Seite www.foo.com/xyz und die Seite foo.com/xyz sollen umgeleitet werden auf www.bar.com/foo/xyz
Mein letzter Versuch nach vielen anderen war der folgende:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www)?.(.*).de [NC]
RewriteRule ^$ http://www.bar.com/%2 [L]
RewriteRule ^(.*)$ http://www.bar.com/%2/$1 [L]
www.foo.com und foo.com werden richtig umgeleitet,
www.foo.com/xyz und foo.com/xyz führen aber zu www.foo.com//xyz,
d.h. es wird foo nicht durch bar ersetzt und der Wert %2 ist leer.
Ich bitte um Tipps.
Hellihello
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www)?.(.*).de [NC]
Muss das sein?
RewriteRule ^$ http://www.bar.com/%2 [L]
Anfang, Ende alls nach bar.com
RewriteRule ^(.*)$ http://www.bar.com/%2/$1 [L]
Zwischen Anfang und Ende darf alles stehen, %2 ist nicht definiert, $1 ist das, was zwischen Anfang und Ende steht.
Wird das durch die RewriteConde beeinflusst?
www.foo.com und foo.com werden richtig umgeleitet,
www.foo.com/xyz und foo.com/xyz führen aber zu www.foo.com//xyz,
d.h. es wird foo nicht durch bar ersetzt und der Wert %2 ist leer.
RewriteRule .*foo.com/xyz$ http://www.bar.com/foo/xyz [L]
Was Du an vars erhältst, sind die eingeklammerten Teile. Die erst $1, die zweite $2?
Dank und Gruß,
Hallo,
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www)?.(.*).de [NC]Muss das sein?
foo war in Beispiel, es soll genau so funktionieren für andere Domainnamen.
Deshalb habe ich diesen Teil (foo) der aufgerufenen Domain aus dem obigen 2. Klammerausdruck und dies erreiche ich doch mit %2 - oder nicht?
In jedem Falle funktioniert das ja auch im Falls von www.foo.com, warum ist %2 dann im zweiten Falle nicht besetzt?
Hellihello
foo war in Beispiel, es soll genau so funktionieren für andere Domainnamen.
Deshalb habe ich diesen Teil (foo) der aufgerufenen Domain aus dem obigen 2. Klammerausdruck und dies erreiche ich doch mit %2 - oder nicht?
Keine Ahnung. Wieso machst Du es nicht unten im RewriteRule in einer Zeile?
RewriteRule ^$ http://www.bar.com/%2 [L]
Was soll diese Rule bringen? Wenn das greift, wird alles weitere abgebrochen. Aber zwischen dem Anfang ^ und dem Ende $ steht ja garnichts.
Wollte ich www.foo.com nach bar.com/foo haben, wäre doch
RewriteRule [www.]*([a-z]*).com(.*) $ http://www.$1.com$2 [L]
vielleicht eher der Ansatz? Eine statt zwei Zeilen.
Dank und Gruß,
Hallo,
RewriteRule [www.]*([a-z]*).com(.*) $ http://www.$1.com$2 [L]
funktioniert nicht, und so weit ich weiß, kann der Domainname nicht aus der RewriteRule ermittelt werden ($1 ist leer!).
Nochmal:
www.irgend-was.com und irgend-was.com soll nach www.bar.com/irgend-was
und
www.irgend-was.com/xyz und irgend-was.com/xyz soll nach www.bar.com/irgend-was/xyz
umgeleitet werden.
Dabei ist irgend-was die aufgerufene Domain, www.bar.com ... feste Zieldomain.
Gruß
Berthold
Hellihello
Hallo,
RewriteRule [www.]*([a-z]*).com(.*) $ http://www.$1.com$2 [L]
funktioniert nicht, und so weit ich weiß, kann der Domainname nicht aus der RewriteRule ermittelt werden ($1 ist leer!).
Wieso das nicht?
Nochmal:
www.irgend-was.com und irgend-was.com soll nach www.bar.com/irgend-was
und
www.irgend-was.com/xyz und irgend-was.com/xyz soll nach www.bar.com/irgend-was/xyz
umgeleitet werden.
Dabei ist irgend-was die aufgerufene Domain, www.bar.com ... feste Zieldomain.
RewriteEngine on
RewriteRule html-ag.(wvs-berlin).de(.*) http://google.de?q=$1&q1=$2
http://html-ag.wvs-berlin.de/rewrite
Dank und Gruß,
Hi,
ich kann nur feststellen, dass es so nicht funktionierte.
Ich schaffe immer nur die eine oder die andere Variante.
Jetzt habe ich es so versucht:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www)?.(.*).de [NC]
RewriteRule ^(.*)$ http://www.bar.com/%2/$1 [L]
Damit funktioniert die Umleitung von
www.foo.com/xyz und foo.com/xyz
und fast auch
www.foo.com und foo.com
nur dass hier das Ziel www.bar.com/foo/ mit dem / endet, was nicht sein darf.
Gruß
Berthold
gudn tach!
RewriteCond %{HTTP_HOST} ^(www)?.(.*).de [NC]
ich haette jetzt den ersten punkt auch als fakultativ bewertet, also:
RewriteCond %{HTTP_HOST} ^(www.)?(.*).de [NC]
RewriteRule ^$ http://www.bar.com/%2 [L]
RewriteRule ^(.*)$ http://www.bar.com/%2/$1 [L]www.foo.com und foo.com werden richtig umgeleitet,
www.foo.com/xyz und foo.com/xyz führen aber zu www.foo.com//xyz,
d.h. es wird foo nicht durch bar ersetzt und der Wert %2 ist leer.
hmm, was sagt denn das log-file? und was passiert, wenn du das pattern explizit mit E=VAR:VAL (z.b. E=footeil:%2) speicherst?
prost
seth
Hellihello seth,
RewriteCond %{HTTP_HOST} ^(www)?.(.*).de [NC]
ich haette jetzt den ersten punkt auch als fakultativ bewertet, also:
RewriteCond %{HTTP_HOST} ^(www.)?(.*).de [NC]
RewriteRule ^$ http://www.bar.com/%2 [L]
RewriteRule ^(.*)$ http://www.bar.com/%2/$1 [L]
Kannst Du mir sagen, warum bei
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?(.*).de
RewriteRule (.*) http://www.example.com?a=%2&b=$1 [L]
in $1 nur noch der Pfad unterhalb des Pfades auftaucht, in dem die .htaccess liegt?
http://html-ag.wvs-berlin.de/rewrite/abc/def bringt als $1=abc/def?
Aber der komplette Dateipfad, wenn ich nur das Verzeichnis aufrufe, in dem die .htaccess liegt?
http://html-ag.wvs-berlin.de/rewrite bringt $1="/var/www/vhosts/html-ag.wvs-berlin.de/httpdocs/rewrite"
In beiden Fällen tauchen aber etwaige Querystrings nicht auf.
Dank und Gruß,
gudn tach!
Kannst Du mir sagen, warum bei
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?(.*).de
RewriteRule (.*) http://www.example.com?a=%2&b=$1 [L]in $1 nur noch der Pfad unterhalb des Pfades auftaucht, in dem die .htaccess liegt?
http://html-ag.wvs-berlin.de/rewrite/abc/def bringt als $1=abc/def?Aber der komplette Dateipfad, wenn ich nur das Verzeichnis aufrufe, in dem die .htaccess liegt?
http://html-ag.wvs-berlin.de/rewrite bringt $1="/var/www/vhosts/html-ag.wvs-berlin.de/httpdocs/rewrite"
ich kenn ich mit dem apache-rewrite-kram nicht besonders aus und kenne auch keine gescheite dokumentation dazu. deswegen bin ich hier schon ueberfragt und muss raten: ich vermute, dass es daran liegt, dass RewriteRule standardmaessig auf den "rewritten path" ("neugeschriebener pfad" trifft's irgendwie nicht) des bisher letzten matchenden aufrufs von RewriteRule zugreift.
In beiden Fällen tauchen aber etwaige Querystrings nicht auf.
das gehoert so, siehe manual.
prost
seth
Hellihello
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?(.*).de
RewriteRule (.*) http://www.example.com?a=%2&b=$1 [L]in $1 nur noch der Pfad unterhalb des Pfades auftaucht, in dem die .htaccess liegt?
http://html-ag.wvs-berlin.de/rewrite/abc/def bringt als $1=abc/def?Aber der komplette Dateipfad, wenn ich nur das Verzeichnis aufrufe, in dem die .htaccess liegt?
http://html-ag.wvs-berlin.de/rewrite bringt $1="/var/www/vhosts/html-ag.wvs-berlin.de/httpdocs/rewrite"ich kenn ich mit dem apache-rewrite-kram nicht besonders aus und kenne auch keine gescheite dokumentation dazu. deswegen bin ich hier schon ueberfragt und muss raten: ich vermute, dass es daran liegt, dass RewriteRule standardmaessig auf den "rewritten path" ("neugeschriebener pfad" trifft's irgendwie nicht) des bisher letzten matchenden aufrufs von RewriteRule zugreift.
Ja, "aber" hier wurde ja garnichts rewritten davor. Das RewriteCond sollte doch wohl lediglich sowas wie ein Filter sein. Ich hätte jetzt erwartet, dass (.*) die komplette URL darstellen würde. Schon garnicht aber den Systempfad. Und auch nicht diesen kürzen um den Teil, der zur .htaccess führt.
In beiden Fällen tauchen aber etwaige Querystrings nicht auf.
das gehoert so, siehe manual.
Das las ich auch schon mittlerweile, da gibts sowas wie %{QUERY_STRINTG}
Dank und Gruß,
Hallo!
Betrifft Eure Diskussion noch mein Problem?
Ich habe nämlich den Faden verloren.
Wenn ich rekapituliere, so gehts doch in meinem Fall nur noch darum ein "/" am Ende der Ziel-URL zu entfernen.
Ich habe zwar gelesen, wie man einen Schrägstrich hinzufügt, aber ihn wegzubekommen, schaffe ich nicht.
Gruß
Berthold
Hellihello
Wenn ich rekapituliere, so gehts doch in meinem Fall nur noch darum ein "/" am Ende der Ziel-URL zu entfernen.
Ich habe zwar gelesen, wie man einen Schrägstrich hinzufügt, aber ihn wegzubekommen, schaffe ich nicht.
Meines erachtens verwendest Du eine RewriteCond wo keine nötig ist. Mach zwei Rules, eins mit "foo", eins ohne. Dann wäre auch der Slash garnicht erst da. Eine Regel für zwei unterschiedliche Outputs scheint nicht günstig zu sein.
Dank und Gruß,
Hallo,
Meines erachtens verwendest Du eine RewriteCond wo keine nötig ist. Mach zwei Rules, eins mit "foo", eins ohne. Dann wäre auch der Slash garnicht erst da. Eine Regel für zwei unterschiedliche Outputs scheint nicht günstig zu sein.
Aus der
RewriteCond erhalte ich doch erst das "foo", nämlich als Teilstring der gerufenen URL.
Wie kann ich sonst "foo" erhalten?
Ich wiederhole, "foo" ist nicht ein feststehender Wert.
Die Datei .htacess soll identisch sein für mehrere Webseiten, die auf die genannte Art umgeleitet werden sollen.
Gruß
Berthold
Hellihello
Meines erachtens verwendest Du eine RewriteCond wo keine nötig ist. Mach zwei Rules, eins mit "foo", eins ohne. Dann wäre auch der Slash garnicht erst da. Eine Regel für zwei unterschiedliche Outputs scheint nicht günstig zu sein.
Aus der
RewriteCond erhalte ich doch erst das "foo", nämlich als Teilstring der gerufenen URL.
Wie kann ich sonst "foo" erhalten?
Ich wiederhole, "foo" ist nicht ein feststehender Wert.
[http://forum.de.selfhtml.org/?t=168072&m=1096468]?
Die Datei .htacess soll identisch sein für mehrere Webseiten, die auf die genannte Art umgeleitet werden sollen.
Und Server-Zugriff hast Du nicht?
Dank und Gruß,
Hallo,
[http://forum.de.selfhtml.org/?t=168072&m=1096468]?
nein
https://forum.selfhtml.org/?t=168072&m=1096474
Und Server-Zugriff hast Du nicht?
Worauf im Server?
Lokal oder im Internet?
Hallo,
hmm, was sagt denn das log-file? und was passiert, wenn du das pattern explizit mit E=VAR:VAL (z.b. E=footeil:%2) speicherst?
Die RewriteLog-Angabe lehnt das System ab (in .htaccess), in der errorlog steht nichts.
Was meinst Du damit: E=VAR:VAL (z.b. E=footeil:%2)?
Wo gebe ich das an und was macht dies?
Gruß
Berthold
Hallo,
kennt Ihr eine kurze,übersichtliche Beschreibung über die Thematik,
insbesondere über die %1, %2, %2, .... und die Reihenfolge der Verarbeitung.
Ich hatte angenommen,dass jedem geklammerten Ausdruck in den RewriteCond ein derartiger Parameter zugewiesen wird undzwar in der Reihenfolge des Auftretens,
Jetzt habe ich aber den Eindruck, dass nur die letzte RewriteCond herangezogen wird und daher in dem einen Fall der Wert nicht vorhanden ist!
Gruß
Berthold
Hellihello
kennt Ihr eine kurze,übersichtliche Beschreibung über die Thematik,
insbesondere über die %1, %2, %2, .... und die Reihenfolge der Verarbeitung.
Ich hatte angenommen,dass jedem geklammerten Ausdruck in den RewriteCond ein derartiger Parameter zugewiesen wird undzwar in der Reihenfolge des Auftretens,
Jetzt habe ich aber den Eindruck, dass nur die letzte RewriteCond herangezogen wird und daher in dem einen Fall der Wert nicht vorhanden ist!
"RewriteCond backreferences: These are backreferences of the form %N (1 <= N <= 9), which provide access to the grouped parts (again, in parentheses) of the pattern, from the last matched RewriteCond in the current set of conditions."
http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond?
Dank und Gruß,
gudn tach!
hmm, was sagt denn das log-file? und was passiert, wenn du das pattern explizit mit E=VAR:VAL (z.b. E=footeil:%2) speicherst?
Die RewriteLog-Angabe lehnt das System ab (in .htaccess), in der errorlog steht nichts.
du koenntest den kram unter einem lokalen apache von dir ausprobieren und dort RewriteLog setzen.
Was meinst Du damit: E=VAR:VAL (z.b. E=footeil:%2)?
Wo gebe ich das an und was macht dies?
in eckigen klammern, so wie [R], siehe http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritelog.
viele beispiele dazu sind z.b. auf http://www.webmasterworld.com/apache/3208525.htm.
aber eigentlich sollte das nicht noetig sein. in %2 muesste afaics schon das richtige stehen.
prost
seth