mod rewrite Apache -> Lighttpd
lighttpdapache
- sonstiges
0 LX
Hey.
Wie setze ich folgendes:
1. Es soll imemr gecheckt werden ob die Datei vorhanden ist
2. Aus www.example.com wird example.com
3. es soll immer auf die index.php im Root-Verzeichnis geleitet werden
in Lighttpd um?
Bei Apache sieht das so aus:
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php [L]
Bei Lighttpd könnte es ja "theoretisch" so aussehen:
url.rewrite-once = (
"%{HTTP_HOST}" => "^www.(.+)$ [NC]",
"^(.*)$" => "http://%1/$1 [R=301,L]",
"%{REQUEST_FILENAME}" => "!-d",
"%{REQUEST_FILENAME}" => "!-f",
".*" => "index.php [L]"
)
Ich weiß aber ehrlich gesagt nicht weiter wie es richtig aussehen soll.
Lg lighttpapachefreak
so etwas wie [NC] kennt lighttpd nicht, genausowenig einen Check, ob die Datei vorhanden ist. Nicht vorhandene Dateien gehen automatisch auf Error 404.
Du solltest unbedingt die lighttpd-Doku zu mod_rewrite lesen. Dann würde Dir klar, dass die Environment-Variablen nicht im gleichen Maße gesetzt sind, sondern Du aus der vorhandenen URL mit einer RegExp herausparsen musst.
Außerdem willst Du für die Umleitung von www.xy auf xy einen redirect, keinen Rewrite. Nur weil Apache das durcheinanderschmeißt, brauchts Du bei lighttpd trotzdem beide Module:
$HTTP["host"] =~ "^www.(.*)$" {
url.redirect = ( "^/(.*)" => "http://%1/$1" )
}
$HTTP["url"] !~ "^index.php" {
url.rewrite-once = ( "^([^?]+)(?(.*))?" => "index.php?filename=$1&$3" )
}
Leider kann in lighttpd keine Variablen ins environment packen, so dass Du nicht mehr REQUEST_FILENAME, sondern $_GET['filename'] nehmen musst.
Gruß, LX
Außerdem willst Du für die Umleitung von www.xy auf xy einen redirect, keinen Rewrite. Nur weil Apache das durcheinanderschmeißt, brauchts Du bei lighttpd trotzdem beide Module:
Okay, klingt logisch.
$HTTP["host"] =~ "^www.(.*)$" {
url.redirect = ( "^/(.*)" => "http://%1/$1" )
}
$HTTP["url"] !~ "^index.php" {
url.rewrite-once = ( "^([^?]+)(?(.*))?" => "index.php?filename=$1&$3" )
}
Funktioniert leider nicht. Keine Fehlermeldung im Errorlog aber sobald ich example.com/foo oder /foo/bar eingebe: 404 - Not Found
Danke und Gruß,
lighttpdapache
Okay, klingt logisch.
$HTTP["host"] =~ "^www.(.*)$" {
url.redirect = ( "^/(.*)" => "http://%1/$1" )
}
$HTTP["url"] !~ "^index.php" {
url.rewrite-once = ( "^([^?]+)(?(.*))?" => "index.php?filename=$1&$3" )
}
Das geht alles noch etwas besser:
$HTTP["host"] =~ "^www.(.*)$" {
url.redirect = ( "^/(.*)" => "http://%1/$1" )
}
url.rewrite-if-not-file = (
"^/(.+)/?$" => "/index.php/$1"
)
So - das ist denke ich was du willst.
www wird auf "ohne www" umgeleitet, die URL wird _nur dann_ umgeschrieben "if-not-file", sprich nur wenn die Datei nicht existiert und alles wird auf index.php weitergeleitet.
Dort kannst du dann die URL über REQUEST_URI auseinandernehen (:
Liebe Grüße,
Philipp Zentner