Hallo.
Ich habe ein Problem mit regular expressions, nämlich will ich aus einem Kontext der mit "foo" beginnt alles matchen, was hinter "foo" kommt. Ist das möglich? Im speziellen geht es darum, beim Apache mit
RedirectMatch permanent regexp URL
eine Anfrage von http://server/foobar auf http://server/bar umzuleiten.
MfG Frank Benkstein.
Hallo.
Hallo Frank,
aus einem Kontext der mit "foo" beginnt alles matchen, was hinter "foo" kommt. Ist das möglich?
Auf der Kommandozeile geht's folgendermaßen (ich hoffe das Problem richtig verstanden zu haben):
# sed -e s/foo.*/bar/
Dabei wird: alice bob foo muh gnaa zu: alice bob bar
MfG Matthias
On Wed, 6 Aug 2003 14:49:17 +0200 Matthias Sauppe matthias.sauppe@gmx.de wrote:
Hallo.
Hallo Frank,
aus einem Kontext der mit "foo" beginnt alles matchen, was hinter "foo" kommt. Ist das möglich?
Auf der Kommandozeile geht's folgendermaßen (ich hoffe das Problem richtig verstanden zu haben):
# sed -e s/foo.*/bar/
Dabei wird: alice bob foo muh gnaa zu: alice bob bar
MfG Matthias
So ähnlich nur soll aus
alice bob foo muh gnaa
foo muh gnaa
werden, wobei ich nur alice und bob kenne und es muß mit nur einer Regel gehen. Was ich vorhab steht hier: http://httpd.apache.org/docs/mod/mod_alias.html#redirectmatch
MfG Frank.
Hallo Frank,
So ähnlich nur soll aus
alice bob foo muh gnaa
foo muh gnaa
werden
Wirklich? Dann:
s/.*foo/foo/
Allerdings doch eher eine Weiterleitung von "/bla/foo/bar.html" auf "http://anotherserver/foo/bar.html" geregelt werden?!
s/.*(foo.*)/http://anotherserver/$1/;
Was in Klammern eingeschlossen ist, kann man dann im Ersetzungsstring als $1, $2 etc. verwenden. Ich hoffe, es jetzt verstanden zu haben ;-)
MfG Matthias
On Wed, 6 Aug 2003 16:45:04 +0200 Matthias Sauppe matthias.sauppe@gmx.de wrote:
Hallo Frank,
So ähnlich nur soll aus
alice bob foo muh gnaa
foo muh gnaa
werden
Wirklich? Dann:
s/.*foo/foo/
Allerdings doch eher eine Weiterleitung von "/bla/foo/bar.html" auf "http://anotherserver/foo/bar.html" geregelt werden?!
s/.*(foo.*)/http://anotherserver/$1/;
Was in Klammern eingeschlossen ist, kann man dann im Ersetzungsstring als $1, $2 etc. verwenden. Ich hoffe, es jetzt verstanden zu haben ;-)
MfG Matthias
Also nochmal:
Dem Handler oder wie das heißt wird der Dokumentenpfad übergeben, .z.B.
/foo/news.html .
Darüber kann ich eine rexexp laufen lassen, z.B. n.*.html auf die ich mich im Ersetzungsstring, das ist der den der Browser als neue URL bekommt, beziehen kann, .z.B.
RedirectMatch n.*.html http://server/bar/$1
Dann wird .z.B. von
http://server/foo/news.html auf http://server/bar/news.html umgeleitet für alle htmls, die mit einem "n" beginnen.
Ich will aber von
http://server/foo/bla.html auf http://server/bla.html umleiten, für alle beliebigen Anfragen /foo/*, weiß aber nicht wie ich nur den *-Teil ohne den foo-Teil matche.
Die Antwort von Stefan umgesetzt hieße
RedirectMatch foo
Was definitiv nicht geht, da ich ja gleich wieder die neue URL bauen muß. Die Frage ist ja, ob das überhaupt geht, also "matche alles, wo davor ein 'foo' steht, aber nicht das foo selbst", oder ob ich mir was anderes suchen muß.
Grüße Frank Benkstein
Hallo,
s/.*foo/foo/ s/.*(foo.*)/http://anotherserver/$1/;
http://server/foo/bla.html auf http://server/bla.html umleiten, für alle beliebigen Anfragen /foo/*, weiß aber nicht wie ich nur den *-Teil ohne den foo-Teil matche.
Hmm. Das Wort "matchen" verwirrt mich etwas. Wenn du in irgendeiner Weise auf das foo Bezug nehmen willst, muss das zwangsläufig irgendwo im Suchstring auftauchen. Im Ersetzungsstring kann man dann ja, wenn man das foo nicht dabei haben möchte, einen Konstrukt der Art s/foo(.*)/$1/ bauen. Das foo wird zwar "gematched", taucht aber im Ersetzungsstring nicht mehr auf.
Gruß Matthias
# Hi, # wen ich Dich richtig verstehe, willst Du das im Apache für das redirect einsetzen # bei mir klappt folgendes in der httpd.conf in einem Virtuellen Server
<IfModule mod_rewrite.c> RewriteEngine On RewriteLog /var/log/apache/serverXYZ/rewrite.log RewriteLogLevel 2
# a) RegEx: alles was in der URL nach dem Slash mit foo beginnt, # gefolgt von einem beliebigen Dateinamen '.*' bis zum Punkt '.' # und nach dem Punkt nur html oder htm oder php (damit verbiete ich z.B .txt ) # mit dem Zeilenende $ musst Du basteln wegen den Parametern an der URL # was in den Klammern steht () , kann dann bei der URL eingesetzt werden als $1 $2 $3 usw. # b) URL : nimmt dann die Ersetzungen # c) Endebedingung : [L] meint nach Treffen der Regel REWRITE-Engine beenden
RewriteRule /foo(.*).(html|htm|php)$ http://server/$1.$2 [L] RewriteRule /foo(.*).(gif|jpg|png)$ http://server/img/$1.$2 [L]
# im allereinfachsten Falle so RewriteRule /foo(.*)$ http://server/$1 [L]
</IfModule>
# hoffe, es hilft Dir # # Robert
On Wed, 6 Aug 2003 17:14:46 +0200 Matthias Sauppe matthias.sauppe@gmx.de wrote:
Hallo,
s/.*foo/foo/ s/.*(foo.*)/http://anotherserver/$1/;
http://server/foo/bla.html auf http://server/bla.html umleiten, für alle beliebigen Anfragen /foo/*, weiß aber nicht wie ich nur den *-Teil ohne den foo-Teil matche.
Hmm. Das Wort "matchen" verwirrt mich etwas. Wenn du in irgendeiner Weise auf das foo Bezug nehmen willst, muss das zwangsläufig irgendwo im Suchstring auftauchen. Im Ersetzungsstring kann man dann ja, wenn man das foo nicht dabei haben möchte, einen Konstrukt der Art s/foo(.*)/$1/ bauen. Das foo wird zwar "gematched", taucht aber im Ersetzungsstring nicht mehr auf.
Gruß Matthias
Ahhhhhhhhhhhhhh!
Das wars, konnte ja nicht ahnen, daß diese klammern so wichtig sind. Danke schön.
Bis bald Frank Benkstein.
On Wed, 6 Aug 2003 14:49:17 +0200 Matthias Sauppe matthias.sauppe@gmx.de wrote:
Hallo.
Hallo Frank,
aus einem Kontext der mit "foo" beginnt alles matchen, was hinter "foo" kommt. Ist das möglich?
Auf der Kommandozeile geht's folgendermaßen (ich hoffe das Problem richtig verstanden zu haben):
# sed -e s/foo.*/bar/
Dabei wird: alice bob foo muh gnaa zu: alice bob bar
MfG Matthias
So ähnlich nur soll aus
alice bob foo muh gnaa
foo muh gnaa
werden, wobei ich nur alice und bob kenne und es muß mit nur einer Regel gehen. Was ich vorhab steht hier: http://httpd.apache.org/docs/mod/mod_alias.html#redirectmatch
MfG Frank.
Hallo Frank,
Am 06. August 2003 schrieb Frank Benkstein:
Ich habe ein Problem mit regular expressions, nämlich will ich aus einem Kontext der mit "foo" beginnt alles matchen, was hinter "foo" kommt. Ist das möglich? Im speziellen geht es darum, beim Apache mit
RedirectMatch permanent regexp URL
eine Anfrage von http://server/foobar auf http://server/bar umzuleiten.
sowas wie s/.*foo(.*)/$1/ ? (das hier speziell ist perl syntax)
Torsten
Frank Benkstein wrote:
Im speziellen geht es darum, beim Apache mit
RedirectMatch permanent regexp URL
eine Anfrage von http://server/foobar auf http://server/bar umzuleiten.
Könnte so gehen:
RedirectMatch ^http://server/foobar(.*)$ http://server/bar$1
oder (ohne Serverangabe) so:
RedirectMatch ^/foobar(.*)$ /bar$1
Jens
Danke an alle die mir geholfen haben. Das mit der Klammer habe ich nicht gewusst.
Grüße Frank Benkstein
lug-dd@mailman.schlittermann.de