Seite 2 von 2

Verfasst: 17.02.2009 10:58
von Gumbo
Mache dazu zwei Regeln daraus:

Code: Alles auswählen

RewriteCond %{REQUEST_URI} !^/index\.php$
RewriteRule ^([^/]+)$ ?username=$1 [QSA]
RewriteRule ^([^/]+)/([^/]+)$ $2?username=$1 [QSA]

Verfasst: 17.02.2009 11:40
von Waldgeist
okay, das ganze funktioniert so wunderbar ... Allerdings habe ich möglichst versucht auf eine zweite Schreibweise zu verzichten nachdem du mir gesagt hast:
Ich würde mich für nur eine Schreibweise entscheiden (entweder mit oder ohne „index.php“).


Sorgt die RewriteCond dafür, dass nur der entsprechende Fall aufgerufen wird? Oder werden beide abgearbeitet. (siehe EDIT2)


EDIT: Ich muss mich korrigieren. Das ganze funktioniert doch nicht. Es kommt zwar kein Fehler, dafür wird die richtige Seite nicht mehr geladen. Er bleibt jetzt nur noch auf der index.php hängen, ganz egal welche Adresse ich eingebe.


EDIT2: Die Frage nach der Funktion von der Condition ist mir inzwischen klar geworden. Auf dieser Seite http://www.widexl.com/tutorials/mod_rewrite.html wird das alles ganz gut erklärt. Das Problem bleibt aber weiterhin. Die Regel muss ja nur dann greifen, wenn die domain.de/USERNAME reinkommt. Nicht aber nur bei !index.php sondern auch bei den anderen FILES. Ich könnte mir vorstellen das hier das Problem liegt ? :?: :roll:

Verfasst: 17.02.2009 12:13
von Gumbo

Code: Alles auswählen

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)$ ?username=$1 [QSA]
RewriteRule ^([^/]+)/([^/]+)$ $2?username=$1 [QSA]

Verfasst: 17.02.2009 12:57
von Waldgeist
Optimal ... Ich glaube auf solch eine leichte Variante wäre ich nicht gekommen ...
Jetzt läuft es einwandfrei. Und ich habe wieder etwas dazugelernt.

Herzlichen Dank Gumbo. Bild

Verfasst: 04.05.2009 08:45
von Waldgeist
So, ich melde mich noch mal zurück.
Denn mir ist noch folgendes aufgefallen:

Wenn ich bei diesem Aufbau:

Code: Alles auswählen

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]+)$ index.php?username=$1 [QSA]
RewriteRule ^([^/]+)/([^/]+)$ $2?username=$1 [QSA]

auf domain.de/username gehe, und dann weiter navigieren möchte, dann fehlt der slash (/) hinter dem /username .
Also es müsste so aussehen : domain.de/username/
damit die weitere Navigation funktioniert.

Ich könnte das ganze zwar jetzt einfach lösen, indem ich in der zweiten Zeile ein / einfüge (vor dem $)

Code: Alles auswählen

RewriteRule ^([^/]+)/$ index.php?username=$1 [QSA]

Aber wirklich schön finde ich das nicht, weil dadurch ebend nicht mehr domain.de/username eingegeben werden kann.

Ich hoffe es ist verständlich was genau ich meine.
Und vielleicht hat ja jemand eine gute Lösung parat?

Bzw hat das überhaupt etwas mit den RewriteRule's zu tun ?

Herzlichen Dank und guten Wochenstart wünsche ich.
Grüße, Jonas

Verfasst: 04.05.2009 16:31
von Gumbo
Gib doch den absoluten URL-Pfad an. Also direkt „/username/file.php“. Oder setze „/username/“ als Basis-URL (siehe BASE-HTML-Element), dann kannst du auch bloß „file.php“ oder „./file.php“ angeben.

Verfasst: 04.05.2009 17:35
von Waldgeist
Du bist brilliant :-). Den "Base" Tag kannte ich noch gar nicht...
Herzlichen Dank, jetzt läuft es wirklich zu meiner absoluten Zufriedenheit. :D

Schöne Woche wünsche ich noch und bis dann.
Herzlichste Grüße, Jonas

Verfasst: 04.05.2009 17:58
von Gumbo
Die Basis-URL zu verändern, hat allerdings auch ein paar Nachteile. Relative URLs werden eben immer von dieser aus aufgelöst. Auch URLs wie „#anker“ (Referenz zu einem Anker im selben Dokument) oder „“ (Referenz auf aktuelle URL). Ein „<a href="#anker">“ oder „<form action="" …>“ funktioniert also nicht mehr so wie gewohnt.

Verfasst: 21.12.2009 18:34
von Waldgeist
Hallo ihr, mein nun doch schon älteres und damals gelöstes Problem möchte ich noch mal erweitern - also neu aufgreifen.

Folgendes hat sich geändert bzw soll erreicht werden:

Verschiedene Userseiten können über domain.de/username angesteuert werden.
Dies geht aktuell immer dann, wenn eine der folgenden Seiten geöffnet wird:
- domain.de/username
- domain.de/username/
- domain.de/username/dateien.php


Das ganze will ich nun aber noch wie folgt erweitern:
Wenn bestimmte Einträge aufgerufen werden, dann bisher über:
- domain.de/username/dateien.php?id=x

Nun soll dateien.php?id=x ersetzt werden durch:
- domain.de/username/3_eintrag.htm

Also immer wenn eine Zahl ($2) + _ + kennung ($3) + .htm aufgerufen wird soll das ganze umgeschrieben werden auf:
- domain.de/username/dateien.php?id=x&kennung=y


Das ganze funktioniert auch halbwegs mit folgendem Code:

Code: Alles auswählen

Options +FollowSymlinks
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^([^/]+)/(.*)_(.*).htm$ article.php?user=$1&id=$2&kennung=$3 [QSA]
RewriteRule ^([^/]+)$ index.php?user=$1 [QSA] 
RewriteRule ^([^/]+)/([^/]*)$ $2?user=$1 [QSA]
Richtig geht es allerdings nur, wenn ich diese Zeilte auskommentiere:
RewriteRule ^([^/]+)$ index.php?user=$1 [QSA]

Ich habe auch versucht mit dem L-Flag zu arbeiten um die Anweisung zu beenden. Auch ohne Erfolg:
RewriteRule ^([^/]+)/(.*)_(.*).htm$ article.php?user=$1&id=$2&kennung=$3 [QSA,L]


Wie muss ich vorgehen, damit wenn Regel 1 erfüllt ist Regel 2 nicht zutrifft ?
Vielen Dank für jede Hilfestellung. :-)


EDIT: Ich habe gerade einfach mal die Reihenfolge geändert. Als ich vorhin getestet habe, hat das nicht wirklich etwas bewirkt ... Aber dann ging es doch... Heißt wenn ich nicht groß was übersehen habe, scheint es so zu funktionieren ?

Code: Alles auswählen

RewriteRule ^([^/]+)$ index.php?user=$1 [QSA] 
RewriteRule ^([^/]+)/([^/]*)$ $2?user=$1 [QSA]
RewriteRule ^([^/]+)/(.*)_(.*).htm$ article.php?user=$1&id=$2&kennung=$3 [QSA]
Kommentare dazu? Kann man das irgend wie effektiver lösen? Oder wird es bei irgend einer Konstellation Fehler geben?

Verfasst: 23.12.2009 15:26
von Gumbo
Probier mal Folgendes:

Code: Alles auswählen

RewriteRule ^([^/]+)/([^/_]+)_([^/_]+)\.htm$ article.php?user=$1&id=$2&kennung=$3 [QSA,L]
RewriteRule ^([^/]+)/([^/]+)$ $2?user=$1 [QSA,L]
RewriteRule ^([^/]+)$ index.php?user=$1 [QSA,L]

Verfasst: 24.12.2009 14:22
von Waldgeist
Da ist irgend ein Fehler drin, aber meine Variante scheint zu funktionieren... Bisher sind zumindest keine Fehler aufgetreten.
Aber ich habe nun noch mal eine Frage in eine komplett andere Richtung.

Ist es mit mod rewrite irgend wie möglich, Domains zu simulieren?
Folgendes Beispiel dazu. Ich habe die Domains: domain1.de und domain2.de

Auf meiner Seite verwende ich Sessions. Also Domain für die Session setzte ich nun .domain1.de
Wer nun unter domain2.de die Seite aufruft, der kann sich nicht einloggen oder sonst etwas machen das über die Session gesteuert ist.

Geht es also irgend wie, dass ich domain2.de sozusagen simuliere und der user effektiv unter domain1.de surft?
Ich glaube es fast nicht, aber wenn es da was gibt lasst es mich wissen. Das würde einige meiner Probleme lösen. :D


An dieser Stelle euch allen noch ein schönes Weihnachtsfest. Und vielen Dank für eure ständigen Bemühungen.

Verfasst: 04.01.2010 13:27
von Waldgeist
Ich nehme an, dass heißt nein :-) ?
Wäre auch merkwürdig wenn es gehen würde, aber so praktisch in meinem Fall. :roll:

Verfasst: 07.01.2010 18:39
von Gumbo
Nein, das ist nicht möglich. Du kannst wohl den Server so konfigurieren, dass ein virtueller Host für beide Domains zuständig ist.

Re: Umschreiben - generelle Verständnisfrage am Beispiel

Verfasst: 11.09.2010 01:06
von Waldgeist
Hallo ihr,

um ein altes Thema mit einer neuen / überarbeiteten Frage mal wieder aufzugreifen ...

Die aktuellen Rewrite Bedingungen sehen wie folgt aus und funktionieren vom Prinzip her optimal:

Code: Alles auswählen

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)$ index.php?user=$1 [QSA] 
RewriteRule ^([^/]+)/([^/]*)$ $2?user=$1 [QSA]
RewriteRule ^([^/]+)/(.*)_(.*).htm$ article.php?user=$1&id=$2&kennung=$3 [QSA]
Nun hat sich aber eine kleine Änderung eingeschlichen der diese Einstellungen nicht gewachsen ist.
Und zwar:

Bisher war die Seite zu erreichen über:
domain1.de/username/index.php (Startseite)
domain1.de/username (auch Startseite)
domain1.de/username/unterseiten.php
domain1.de/username/spezielleSeiten.htm

Nun soll das ganze aber auch erreichbar sein ohne /username . Also über:
domain2.de (startseite)
domain2.de/index.php (startseite)
domain2.de/unterseiten.php
domain2.de/spezielleSeiten.htm

Wird klar was ich meine ?
Und gibt es da eine elegante Lösung für?
ZB mittels "%{REQUEST_URI}" oder etwas ähnlichem?

Herzlichen Dank und eine gute Nacht :-)

Re: Umschreiben - generelle Verständnisfrage am Beispiel

Verfasst: 11.09.2010 11:01
von Waldgeist
So, ich habe ein wenig rum-experimentiert und mich erneut vertiefend eingelesen (Wahnsinn wie schnell man doch wieder vergisst).
Und bin auf folgende Rules gekommen ...

Code: Alles auswählen

RewriteCond %{HTTP_HOST} ^sub\.domain1\.(de|at|dev)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)$ index.php?user=$1 [QSA]
RewriteRule ^([^/]+)/([^/]*)$ $2?user=$1 [QSA]
RewriteRule ^([^/]+)/(.*).htm$ article.php?user=$1&url=$2 [QSA]

RewriteCond %{HTTP_HOST} !^sub\.domain1\.(de|at|dev)$ [NC]
RewriteRule ^([^/]+).htm$ article.php?url=$1 [QSA]
Wenn also domain1 aufgerufen wird, dann greif die obere Regel.
Wird eine beliebige andere Domain die nicht domain1 beinhaltet aufgerufen, greift die zweite Regel (falls .htm) darin vorkommt.

Gibt es an dieser Bedingung irgend was auszusetzen oder zu verbessern?
Danke :)