lightTPD: Redirect greift nicht

Apache, Lighttpd, nginx, Cherokee
dtdesign
Posts: 391
Joined: 2006-09-05 21:12
Location: Berlin

lightTPD: Redirect greift nicht

Post by dtdesign » 2007-06-13 22:12

Hallo,

ich habe ein kleines Problem mit dem Redirect-Modul des LightTPD. Das Modul wurde in der lighttpd.conf aktiviert und sollte eigentlich auch greifen. Ich habe mich bei der Redirect-Regel an das Beispiel von Lighty [1] gehalten.

System: Debian Etch 4.0
Webserver: LightTPD 1.4.13-4 (Debian Paket)

Code: Select all

$HTTP["host"] !~ "^www.(xyz-)?domain.de$" {
        $HTTP["host"] =~ "^([^.]+).(xyz-)?domain.de$" {
                url.redirect = (
                        "^/(.*)" => "http://www.domain.de/$1"
                )
        }
}
Habe ich dabei etwas übersehen, der RegExp-Ausdruck funktioniert, habe den getestet. Weiss jemand Rat?

Gruß
dtdesign

[1] http://trac.lighttpd.net/trac/wiki/Docs%3AModRedirect

Roger Wilco
Administrator
Administrator
Posts: 5924
Joined: 2004-05-23 12:53

Re: lightTPD: Redirect greift nicht

Post by Roger Wilco » 2007-06-13 22:21

Das Problem dürfte sein, dass der RegEx "^([^.]+).(xyz-)?domain.de$" auch auf "www.domain.de" matched, d. h. du bekommst eine Endlosschleife und lighty weigert sich das zu tun.

dtdesign
Posts: 391
Joined: 2006-09-05 21:12
Location: Berlin

Re: lightTPD: Redirect greift nicht

Post by dtdesign » 2007-06-13 22:46

Nachdem ich die innere Regel auskommentiert habe, wird zwar domain.de bzw. xyz-domain.de auf http://www.domain.de weitergeleitet, jedoch wird ein xyz.domain.de einfach stehen gelassen. Dieses verhalten ist jedoch falsch, da ich alle Anfragen zwangsweise auf http://www.domain.de habem muss dank einer sehr interessanten Konfiguration eines CMS...

Kann jemand einem RegExp-Unfähigen Hilfestellung leisten?

PS: Ich _hasse_ RegExp einfach...

Gruß
dtdesign

dtdesign
Posts: 391
Joined: 2006-09-05 21:12
Location: Berlin

Re: lightTPD: Redirect greift nicht

Post by dtdesign » 2007-06-17 11:49

Falls es wen interessiert:

Wenn man virtuelle Hosts einsetzt und gerne bei einer Domain alles was nicht http://www.example.org/x.example.org/y.example.org lautet auf http://www.example.org umleiten möchte, empfiehlt sich folgender Syntax. Das Beispiel von LightTPD ist verkehrt herum, wenn man mehr als eine Domain hat!

Code: Select all

$HTTP["host"] =~ "^(([^.]+).)?example.org$" {
    $HTTP["host"] !~ "^(www|x|y).example.org$" {
        url.redirect = (
            "^/(.*)" => "http://www.example.org/$1"
        )
    }
}
Zur Erläuterung:

Auf den regulären Ausdruck "^(([^.]+).)?example.org$" passt example.org sowie xyz.example.org (wobei xyz beliebig ist). Dies ist wichtig, damit andere VHosts bzw. Domains nicht durch die Folge-Regel geprüft werden.

Der nächste reguläre Ausdruck "^(www|x|y).example.org$" überprüft, ob vor dem eigentlichen Domainnamen ein Subdomain namens www/x/y steht. Da dies gültige Subdomains sind, bricht die Überprüfung dort ab, ansonsten wird man auf http://www.example.org weitergeleitet und der Query-String nach dem Slash wird gleichzeitig mit übergeben.

Informationen dazu gibt es hier:

:arrow: http://trac.lighttpd.net/trac/wiki/Docs%3AModRedirect

Zum testen von regulären Ausdrücken kann ich euch den RegEx-Coach empfehlen:

:arrow: http://www.weitz.de/regex-coach/

Gruß
dtdesign