Problem mit mod_rewrite auf apache2 (3 Regeln)

Hi,
ich zermater mir nun schon ein paar Stunden den Kopf und komme einfach nicht weiter.
Ich benötige eine .htaccess, die folgendes umsetzt:

  1. URL Syntax: http://SUBDOMAIN.server.com/WOCHENTAG
    soll werden zu http://www.server.com/index.php?stadt=SUBDOMAIN&woch…

  2. URL Syntax: http://SUBDOMAIN.server.com/location/LOCATIONNAME
    soll werden zu http://www.server.com/location.php?stadt=SUBDOMAIN&l…

  3. Alle andere Anfragen die auf eine Subdomain gehen (z.B. http://subdomain.server.com sollen) auch
    auf die anderen Seitenelemente bezogen funktionieren. Momentan habe ich dass Problem, dass zwar alles
    ansatzweise richtig „rewritten“ wird, jedoch CSS Tags usw. gar nicht mehr gefunden werden, gibt der
    Benutzer also beispielsweise ein: http://subdomain.server.com/impressum.html sollte auch
    die date unter http://www.server.com/impressum.html korrekt angezeigt werden. (natürlich
    soll der host auf subdomain.server.com bleiben und nicht einfach wieder umgerouted werden)
    Noch ein Beispiel für das „Problem“, wenn ich z.B. die URL: http://subdomain.server.com/images/test.jpg
    eingebe und eigentlich ein Bild sehen sollte, lande ich bei der Index Page - mit zerstörtem
    CSS - irgendwie scheint also alles und nicht nur die URLs interpretiert zu werden… :frowning:

Bin dankbar für jede Hilfe.
Ciao
Christian

Hallo,

  1. URL Syntax: http://SUBDOMAIN.server.com/WOCHENTAG
    soll werden zu
    http://www.server.com/index.php?stadt=SUBDOMAIN&woch…

  2. URL Syntax:
    http://SUBDOMAIN.server.com/location/LOCATIONNAME
    soll werden zu
    http://www.server.com/location.php?stadt=SUBDOMAIN&l…

  3. Alle andere Anfragen die auf eine Subdomain gehen (z.B.
    http://subdomain.server.com sollen) auch
    auf die anderen Seitenelemente bezogen funktionieren. Momentan
    habe ich dass Problem, dass zwar alles
    ansatzweise richtig „rewritten“ wird, jedoch CSS Tags usw. gar
    nicht mehr gefunden werden, gibt der
    Benutzer also beispielsweise ein:
    http://subdomain.server.com/impressum.html sollte auch
    die date unter http://www.server.com/impressum.html korrekt
    angezeigt werden. (natürlich
    soll der host auf subdomain.server.com bleiben und nicht
    einfach wieder umgerouted werden)

D.h. du sendest keine Redirects?

Noch ein Beispiel für das „Problem“, wenn ich z.B. die URL:
http://subdomain.server.com/images/test.jpg
eingebe und eigentlich ein Bild sehen sollte, lande ich bei
der Index Page - mit zerstörtem
CSS - irgendwie scheint also alles und nicht nur die URLs
interpretiert zu werden… :frowning:

Dann sag uns doch mal, welche RewriteRules du bisher hast, sonst kann man dir nicht so pauschal helfen. Auch kannst du eine Logdatei einrichten, in der das Rewriten gelogged wird, mit einem RewriteLogLevel von 4 oder 5 siehst du _sehr_ gut, bei welcher URL welche Regel greift.

Grüße,
Moritz

Hi Moritz,

also dies ist die aktuelle htaccess:

#AuthUserFile „/var/www/www.xyz.com/html//.htpasswd
#AuthType Basic
#AuthNamexyz.com
#require valid-user

RewriteEngine On

#PHP => HTML / HTM / *
RewriteRule ^(.*).html$ $1.php

#WWW entfernen bei der eingabe der haupturl www.xyz.com
RewriteCond %{HTTP_HOST} ^www.xyz.com$ [NC]
RewriteRule ^(.*) http://xyz.com/$1 [L,R=301]

CATCH ALL

RewriteCond %{HTTP_HOST} ^(.+).xyz.com$ [NC]
RewriteRule ^(.*)$ index.php?stadt=%1&htpath=$1 [QSA]

Habe mich erstmal an der ersten Regel versucht, bin diesbzgl. aber leicht gescheitert.
Aus den Logs (habe die mal eingebaut) werde ich auch nicht so ganz schlau… :frowning:

Hoffe du kannst mir weiterhelfen.

Gruß,
Christian

Hallo,

#PHP => HTML / HTM / *
RewriteRule ^(.*).html$ $1.php

Wenn du dir neue Webseiten aufbaust, würde ich an deiner Stelle die Endungen ganz weglassen und mit MultViews automatisch die entsprechenden Skript aufrufen. Ist aber Geschmasckssache.

#WWW entfernen bei der eingabe der haupturl www.xyz.com
RewriteCond %{HTTP_HOST} ^www.xyz.com$ [NC]
RewriteRule ^(.*) http://xyz.com/$1 [L,R=301]

Sieht gut aus.

CATCH ALL

RewriteCond %{HTTP_HOST} ^(.+).xyz.com$ [NC]
RewriteRule ^(.*)$ index.php?stadt=%1&htpath=$1 [QSA]

Hm, enthält denn %1 das richtige, also den Namen der Subdomain? In der error.log des Apache steht drinnen, welche Datei er probiert hat zu lesen.

Vielleicht kannst du dir von http://httpd.apache.org/docs/2.2/en/misc/rewriteguid… im Abschnitt „Virtual User Hosts“ Inspiration holen.

Habe mich erstmal an der ersten Regel versucht, bin diesbzgl.
aber leicht gescheitert.

Was heißt das genau?

Aus den Logs (habe die mal eingebaut) werde ich auch nicht so
ganz schlau… :frowning:

Aus welchen Log-Einträgen, und was verstehst du daran nicht?

Grüße,
Moritz

Hi Moritz / Alle anderen,
bin jetzt schon ein wenig weiter gekommen mit dem Problem dank deiner Hilfe.
Nun habe ich jedoch das Problem, dass sobald die Regel
#Umschreiben bei den Locations: http://STADT.xyz.com/location/LOCATIONNAME => http://www.xyz.com/location.php?stadt=STADT&location…
greift, die folgende (letzte) Regeln nicht mehr ausgeführt werden soll.

Wie kann ich dies durch modifizieren der htaccess Datei realisieren?

Danke im Voraus,
Christian

RewriteEngine On

Alle PHP Dokumente als *.html Dokumente tarnen

RewriteRule ^(.*).html$ $1.php

Beim Aufruf von www.xyz.com das www. entfernen, damit es nicht zu problem mit den

folgenden Regeln kommt, die mit den Subdomains zusammenhängen…

Bessere Alternative wäre, die folgenden Regeln nicht zu durchlaufen, sofern www drinnesteht!!!

RewriteCond %{HTTP_HOST} ^www.xyz.com$ [NC]
RewriteRule ^(.*) http://xyz.com/$1 [L,R=301]

#Umschreiben bei den Locations: http://STADT.xyz.com/location/LOCATIONNAME => http://www.xyz.com/location.php?stadt=STADT&location…
RewriteCond %{HTTP_HOST} ^(.+).xyz.com$ [NC]
RewriteRule ^location/(.*)$ location.php?stadt=%1&location=$1 [L,QSA]

Umschreiben http://STADT.xyz.com/WOCHENTAG==> http://www.xyz.com/index.php?stadt=STADT&wochentag=W…

RewriteCond %{HTTP_HOST} ^(.+).xyz.com$ [NC]
RewriteRule ^(.*)$ index.php?stadt=%1&wochentag=$1 [QSA]

Aktueller Stand der Probleme, wer kann mir helfen???

* bei der Eingabe von http://www.servername.com wird das „www“ entfernt, dieses soll nicht entfernt werden, aber logischerweise sollen denn auch nicht die folgenden Regeln durchlaufen werden, da es sonst crashen könnte, da „www“ mit VAR1 als Subdomain verwechselt wird
* Die Regel mit der Sitemap scheint irgendwie nicht so ganz zu funktionieren, eigentlich sollte die Syntax sein http://VAR1.servername.com/sitemap.xml ==> http://www.servername.com/gensitemap.php?stadt=VAR1
* Bei der Regel mit der location.php wird die Subdomain VAR1 nicht als Parameter an die location.php übergeben (stadt=)
* Bei der Regel mit der index.php wird die Subdomain VAR1 nicht als Parameter an die index.php übergeben (stadt=)

wäre super, wenn jemand mit Rat und Tat zur Seite stehen könnte.

Gruß,
Christian

Code:
Options +FollowSymLinks

RewriteEngine On

RewriteCond %{REQUEST_URI} ^(.+).html$ [NC]
RewriteCond %{DOCUMENT_ROOT}%1.php -f
RewriteRule ^(.+).html$ $1.php [QSA,L]

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_HOST} !^www.servername.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([^.]+).servername.com$ [NC]
RewriteRule ^([^/]+)/?$ /index.php?stadt=%1&wochentag=%2 [QSA,L]

RewriteCond %{HTTP_HOST} !^www.servername.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([^.]+).servername.com$ [NC]
RewriteRule ^sitemap.xml$ /gensitemap.php3?stadt=%1 [QSA,L]

RewriteCond %{HTTP_HOST} !^www.servername.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([^.]+).servername.com$ [NC]
RewriteRule ^(location)/([^/]+)/?$ /$1.php?stadt=%1&$1=$2 [QSA,L]