www in ordner, subdomain in ordner mit Variable, fallback

URLs umschreiben, umleiten, blocken oder sperren - all das und noch viel mehr kann mit mod_rewrite erreicht werden. Mit regulären Ausdrücken, Conditions und Rules stehst Du auf Kriegsfuss? mod_rewrite macht nicht das was Du willst, oder funktioniert gar nicht? hier bist Du richtig!

Moderatoren: Bob, Super-Mod

www in ordner, subdomain in ordner mit Variable, fallback

Beitragvon MueThoS » 07.02.2010 13:24

Hallo zusammen,
zunächst mal Respekt an die schlauen Köpfe hier, die durch das System durch blicken!
Mir ist das anscheind zu hoch.
Ich habe mal versucht ähnliche Problemstellungen zu finden und die auf meine Bedürfnisse anzupassen.
Aber ich bekomme es nicht hin.

Ich versuche mal zu verdeutlichen was mir vorschwebt:
Code: Alles auswählen
meinedomain.de       -> www/index.php                   (Angezeigte URL= www.meinedomain.de)
www.meinedomain.de   -> www/index.php                   (Angezeigte URL= www.meinedomain.de)
klaus.meinedomain.de -> kunden/index.php?KD=klaus       (Angezeigte URL= klaus.meinedomain.de)

Wenn klaus in der DB nicht existiert leite ich ihn per php auf www um.

Dann noch eine verständnisfrage:
Wenn ich dann im weiteren verlauf so eine url habe : klaus.meinedomain.de?site=userdaten
wie würde das dann in der URL-Zeile aussehen.
(hmm obwohl das kann ich dann ja selber testen)

Wenn das so läuft, wow dann eröffnen sich mir völlig neue Möglichkeiten!
Schonmal danke!

Gruß
MueThoS
PS: Ist es schwer dann später das ganze auf https um zu stellen?
MueThoS
.
.
 
Beiträge: 11
Registriert: 07.02.2010 13:11

Beitragvon kartoffelkopf » 07.02.2010 16:43

Mehr eine Studie als schluesselfertige Loesung:

Code: Alles auswählen
RewriteEngine on
RewriteCond %{HTTP_HOST} ^gnympf.de
RewriteRule ^(.*)$ http://www.gnympf.de/$1  [R=301,L]
RewriteCond %{HTTP_HOST} ^www.gnympf.de
RewriteRule ^(.*)$ /www/index.php       [PT,L]
RewriteCond %{HTTP_HOST} ^klaus.gnympf.de
RewriteCond /kunden/index.php?KD=klaus  -U
RewriteRule ^(.*)$ /kunden/index.php?KD=klaus   [PT,S=1,L]
RewriteRule ^(.*)$ /www/index.php       [PT,L]


Wuerde eigentlich viel kuerzer gehen und es gibt wahrscheinlich noch mehr Kunden als Klaus.

Die richtigen Suchbegriffe bei Google waeren dazu
mod_rewrite+RewriteMap
mod_rewrite+mass+virtual+host
kartoffelkopf
.
.
 
Beiträge: 59
Registriert: 06.02.2010 15:03

Beitragvon MueThoS » 07.02.2010 16:55

Erstmal danke!
Aha, wie ich schon sagte sieht gut aus aber ich verstehs nicht.

Klar, alle Subdomains ausser www sollen als Variable KD übergeben werden.
Soweit ich deine Ausarbeitung verstehe ist die hier nicht der Fall.

Bitte korregieren wenns nicht stimmt:
Code: Alles auswählen
RewriteCond %{HTTP_HOST} ^gnympf.de
RewriteRule ^(.*)$ http://www.gnympf.de/$1  [R=301,L]

Leitet ohne sub auf die www um.

Code: Alles auswählen
RewriteCond %{HTTP_HOST} ^www.gnympf.de
RewriteRule ^(.*)$ /www/index.php       [PT,L]

Leitet alles was auf www rein kommt um ins unterverzeichnis www/index.php


Code: Alles auswählen
RewriteCond %{HTTP_HOST} ^klaus.gnympf.de
RewriteCond /kunden/index.php?KD=klaus  -U
RewriteRule ^(.*)$ /kunden/index.php?KD=klaus   [PT,S=1,L]
RewriteRule ^(.*)$ /www/index.php       [PT,L]

Macht statisch aus der sub klaus eine kd=klaus und leitet in das kundenverzeichnis.

Code: Alles auswählen
RewriteRule ^(.*)$ /www/index.php       [PT,L]

Was macht dann die letzte Zeile noch?

Also der Kundenname müßte dünamisch umgewandelt werden.
Das ist genau so kompliziert wie dieses Dingen bei PHP mit dem preg_match! Das verstehe ich nämlich auch nicht.

EDIT: Ah, die letzte Zeile ist das Fallback?
MueThoS
.
.
 
Beiträge: 11
Registriert: 07.02.2010 13:11

Beitragvon kartoffelkopf » 07.02.2010 17:19

MueThoS hat geschrieben:Erstmal danke!
Aha, wie ich schon sagte sieht gut aus aber ich verstehs nicht.

Klar, alle Subdomains ausser www sollen als Variable KD übergeben werden.
Soweit ich deine Ausarbeitung verstehe ist die hier nicht der Fall.

Code: Alles auswählen
RewriteCond %{HTTP_HOST} ^klaus.gnympf.de
RewriteCond /kunden/index.php?KD=klaus  -U
RewriteRule ^(.*)$ /kunden/index.php?KD=klaus   [PT,S=1,L]
RewriteRule ^(.*)$ /www/index.php       [PT,L]

Macht statisch aus der sub klaus eine kd=klaus und leitet in das kundenverzeichnis.

Code: Alles auswählen
RewriteRule ^(.*)$ /www/index.php       [PT,L]

Was macht dann die letzte Zeile noch?

Also der Kundenname müßte dünamisch umgewandelt werden.
Das ist genau so kompliziert wie dieses Dingen bei PHP mit dem preg_match! Das verstehe ich nämlich auch nicht.

EDIT: Ah, die letzte Zeile ist das Fallback?


Die letzte Zeile zeigt die Standard-Seite an, wenn die Bedingung vorher (Kundenseite vorhanden) nicht erfuellt ist.
Das Beispiel gilt tatsaechlich nur fuer den Kunden Klaus.
Allgemein gehalten muesste es dann so lauten:

Code: Alles auswählen
RewriteEngine on
RewriteCond %{HTTP_HOST} !^(www.)?gnympf.de [NC]
RewriteCond %{HTTP_HOST} ^(.+)gnympf.de [NC]
RewriteRule ^(.*)$ /kunden/index.php?KD=%1   [PT,S=1,L]


Keine Ahnung, was /kunden/index.php macht. Wenn alle Kunden in einer Datenbank stehen, wuerde man das wie gesagt mit einer RewriteMap machen.

[/code]
kartoffelkopf
.
.
 
Beiträge: 59
Registriert: 06.02.2010 15:03

Beitragvon MueThoS » 07.02.2010 18:05

Ok zur Erklährung:
Kunde meldet sich auf der Seite www.meinedomain.de oder halt meinedomain.de an und bekommt eine eigene url.
z.B.: Kunde1.meinedomain.de
Hier bekommt Kunde1 die selbe Seite wie Kunde2 nur halt mit anderem Inhalt.
Deshalb läuft alles in die selbe index.php nur durch das KD=Kunde1 variiert der Inhalt der aus der Datenbank geholt wird.

Wenn du mir sagst RewriteMap ist dafür besser geeignet glaube ich dir das da ich mich, wie schon gesagt, nicht wirklich auskenne!
Ich habe sowieso noch Probleme den Server überhaupt dazu zu bewegen auf die entsprechende Subdomain zu reagieren.
Im moment geht halt nur meinedomain.de. Das www und das * bzw nur das * muß ich ihm noch bei bringen :D

Wenn das soweit läuft mache ich die PHP-Sachen und die sind dan weniger das Problem.
MueThoS
.
.
 
Beiträge: 11
Registriert: 07.02.2010 13:11

Beitragvon kartoffelkopf » 07.02.2010 18:44

Achso, dann liefert /kunden/index.php so eine Art Template nach Kunden-ID aus? Dann muesste das letzte Beispiel genuegen. Die RewriteMap waere etwas, wenn man Kunden-IDs zum Beispiel auf Directories mappem moechte.
kartoffelkopf
.
.
 
Beiträge: 59
Registriert: 06.02.2010 15:03

Beitragvon MueThoS » 07.02.2010 18:57

Ja genau das soll passieren.
Nur leider klappt es nicht. Habe natürlich auch selber weitere Versuche gestartet-
Aber es kommen meißt Fehler. Bin mir noch nicht ganz sicher was das alles heißt:
Code: Alles auswählen
Entweder:
[Sun Feb 07 18:51:10 2010] [error] [client XXXXX] Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden: /var/www/vhosts/XXX/httpdocs/index.pl
Oder:
[Sun Feb 07 18:52:31 2010] [error] [client XXXXX] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.


Bin am verzweifeln.
MueThoS
.
.
 
Beiträge: 11
Registriert: 07.02.2010 13:11

Beitragvon kartoffelkopf » 07.02.2010 22:29

MueThoS hat geschrieben:Ja genau das soll passieren.
Nur leider klappt es nicht. Habe natürlich auch selber weitere Versuche gestartet-
Aber es kommen meißt Fehler. Bin mir noch nicht ganz sicher was das alles heißt:
Code: Alles auswählen
Entweder:
[Sun Feb 07 18:51:10 2010] [error] [client XXXXX] Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden: /var/www/vhosts/XXX/httpdocs/index.pl
Oder:
[Sun Feb 07 18:52:31 2010] [error] [client XXXXX] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.


Bin am verzweifeln.


Options FollowSymlinks muss in httpd.conf gesetzt sein, wenn im Dateisystem Symlinks vorhanden sind.

Beim zweiten Fehler gibt es ein Rewrite-Loop. Schickst Du nochmal besser Deine ganze rewrite-conf.
kartoffelkopf
.
.
 
Beiträge: 59
Registriert: 06.02.2010 15:03

Beitragvon MueThoS » 08.02.2010 14:13

Richtig, das mit den Options-Gedöns habe ich sogar bei Google gefunden und habe versucht das einzubauen.
Ich habs in der htaccess versucht und habe es auch in der Config versucht.
Klappte leider nicht. Was aber mit sicherheit an mir liegt :D

Die Config für das rewrite habe ich jetzt nicht hier auf der Arbeit.
Aber genau genommen habe ich alles schon ausprobiert.
Verschiedene variationen, oder auch mal nur einen Teil.
Ich hoffe das ich Heute Zeitig nach Hause kann um nochmal etwas rum zu Probieren.
Wie schon gesagt PHP geht eigentlich schon ganz gut aber diese Sache mit dem Server administrieren (vServer)
und dem htaccess ist noch nciht so mein Fall.
Aber ich gebe nicht auf :x

Ich muss also hin bekommen das er nicht wegen der Options meggert.
Weil dann liegt es nur noch an dem rewrite, richtig?
Und das sollten wir dann hin bekommen, hoffe ich.

Gruß
MueThoS
MueThoS
.
.
 
Beiträge: 11
Registriert: 07.02.2010 13:11

Beitragvon MueThoS » 08.02.2010 16:05

So, zu Hause und bin am testen!
Also ich habe den Server dazu überredet das die Meldung mit dem Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies... nicht mehr kommt.
Aber er ist sonst mit nichts einverstanden.
Übrigens der google-test funktioniert.

Aber egal was ich ausprobiere es kommt immer diese Meldung: Request exceeded the limit of 10 internal redirects due to probabl.....
Und ich habe alles mögliche schon probiert. Deine Vorschläge von oben und auch eigenkreationen.

Jetzt Probiere ich nochmal den google-test etwas umzuschreiben. Es muß doch möglich sein wenigstens in einen anderen Ordner zu kommen.

Edit:
Mal eine Frage:
Die htaccess-Datei ist doch nur gültig wenn ich auf den Ordner surfe indem sie liegt oder?
weil enn ich folgendes mache:
RewriteEngine On
RewriteRule ^ http://meinedomain.de/www/ [R,L]

Das ist doch das mindeste was gehen sollte oder?
Und da sagt mir mein Browser :Die aufgerufene Website leitet die Anfrage so um, dass sie nie beendet werden kann.
MueThoS
.
.
 
Beiträge: 11
Registriert: 07.02.2010 13:11

Beitragvon MueThoS » 08.02.2010 16:41

Dat gibbet doch garnicht!!!
Also ich habe es hin bekommen!
Bzw DU hast es hin bekommen.
RewriteEngine On
RewriteCond %{HTTP_HOST} ^meinedomain.de
RewriteRule ^(.*)$ http://www.meinedomain.de/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www.meinedomain.de
RewriteRule ^(.*)$ /www/index.php [PT,L]
RewriteCond %{HTTP_HOST} !^(www.)?meinedomain.de [NC]
RewriteCond %{HTTP_HOST} ^(.+)meinedomain.de [NC]
RewriteRule ^(.*)$ /kunden/index.php?KD=%1 [PT,S=1,L]

Das klappt genau wie ich es haben will.
Einziger schönheitsfehler: In der übergebenen Variable ist der Punkt mit drinne! Kann man den noch entfernen?
Wenn nicht mache ich das über PHP.

Zweite Frage:
Ich habe ja raus bekommen das natürlich die htaccess auch für die Unterordner gilt. Muß ja auch wenn man ne Zugangskontrolle damit realisiert.
Ich habe jetzt in den zwei Ordner jeweils eine htaccess mit nem RewriteEngine OFF ist das der richtige Weg?
MueThoS
.
.
 
Beiträge: 11
Registriert: 07.02.2010 13:11

Beitragvon kartoffelkopf » 08.02.2010 17:19

MueThoS hat geschrieben:Dat gibbet doch garnicht!!!
Also ich habe es hin bekommen!
Bzw DU hast es hin bekommen.
RewriteEngine On
RewriteCond %{HTTP_HOST} ^meinedomain.de
RewriteRule ^(.*)$ http://www.meinedomain.de/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www.meinedomain.de
RewriteRule ^(.*)$ /www/index.php [PT,L]
RewriteCond %{HTTP_HOST} !^(www.)?meinedomain.de [NC]
RewriteCond %{HTTP_HOST} ^(.+)meinedomain.de [NC]
RewriteRule ^(.*)$ /kunden/index.php?KD=%1 [PT,S=1,L]

Das klappt genau wie ich es haben will.
Einziger schönheitsfehler: In der übergebenen Variable ist der Punkt mit drinne! Kann man den noch entfernen?
Wenn nicht mache ich das über PHP.

Zweite Frage:
Ich habe ja raus bekommen das natürlich die htaccess auch für die Unterordner gilt. Muß ja auch wenn man ne Zugangskontrolle damit realisiert.
Ich habe jetzt in den zwei Ordner jeweils eine htaccess mit nem RewriteEngine OFF ist das der richtige Weg?


Wie schoen, dass es jetzt klappt. Fuer die erste Frage muss die vorletzte Zeile so lauten:

Code: Alles auswählen
RewriteCond %{HTTP_HOST} ^(.+).meinedomain.de [NC]


Mit den Unterordnern verstehe ich nicht. Mod_Rewrite schreibt Adressen um und nicht Unterordner :)

Wenn Du nur den ersten Teil einer URL verarbeiten willst, dann darf die Rule nicht so gierig matchen:

Code: Alles auswählen
RewriteRule ^/([^/]+)/([^/]+)$ /kunden/index.php?KD=$1&PT=$2   [PT,L]



Nur als Beispiel...
kartoffelkopf
.
.
 
Beiträge: 59
Registriert: 06.02.2010 15:03

Beitragvon MueThoS » 08.02.2010 17:54

So,
weiter gehts (ist mir schon fast peinlich)
Also das mit dem Punkt hat auch wieder geklappt. Der ist jetzt weg.
Was ich meinte mit Unterordner ist folgendes;
Er hat mir ja immer gesagt das zu viele Weiterleitungen durchgeführt werden und der Server deshalb abbricht.
Mit der htaccess im Unterordner in der nur steht RewriteEngine OFF hat es dann geklappt.
Zumindest vorerst.
Ich habe mir jeweils in den zwei ordnern eine index.php gelegt um zu schauen ob ich am richtigen Ort ankomme.
Also www.meinedomain.de hat mich in den www ordner geleitet.
Und test.meinedomain.de hat mich in den Kundenordner geleitet und die Variable test stand zur Verfügung.

Letzteres geht auch immernoch.
Jetzt wollte ich aber eine joomla Neuinstallation in dem WWW ordner machen.
Und nu sagt er wieder das zu viele Umleitungen statt finden.
Egal ob die htaccess von mir oder die von Joomla oder auch keine drinne ist.

Wenn ich den Server hier stehen hätte würde ich jetzt gegen treten.
Zum glück komme ich da nicht ran!
MueThoS
.
.
 
Beiträge: 11
Registriert: 07.02.2010 13:11

Beitragvon kartoffelkopf » 08.02.2010 18:32

Die RewriteRules oben unterstuetzen gar keine Unterordner. Entweder gibt es noch Rewrites in der httpd.conf oder .htaccess oder in der index.php wird mit HTTP-Headern (etwa "Location:") der Request umgeleitet.
Wenn Du

Code: Alles auswählen
RewriteEngine off


schaltest, duerfte ja der ganze Spuk vorbei sein. Oder Du postest alle RewriteRules nochmal...
kartoffelkopf
.
.
 
Beiträge: 59
Registriert: 06.02.2010 15:03

Beitragvon MueThoS » 08.02.2010 18:38

Och menno, das ist aber eine blöde Sache!

Mit den oben genannten Regeln klappt zwar erstmal alles soweit bis ich Joomla starten will.
Dann fängt er wieder von vorne an mit zu vielen weiterleitungen.
Jetzt habe ich diese Regel genommen:
RewriteRule ^(.*)$ /www/index.php [R=301,L]
Nun klappt es zwar aber ich habe den www-Ordner im Domainnamen.
Mache ich das mit [PT] klappt es nicht. Also die Weiterleitung schon aber dann kommt Joomla und dann gehts nicht mehr.

Ich weiß nicht ob dir nochwas einfällt ansonsten muß ich das www in der URL lassen!
MueThoS
.
.
 
Beiträge: 11
Registriert: 07.02.2010 13:11

Nächste

Zurück zu mod_rewrite

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron