Umschreiben - generelle Verständnisfrage am Beispiel

Eines der wichtigsten Anwendungsgebiete von mod_rewrite ist das umschreiben von dynamischen in statische URLs um "suchmaschinenfreundliche URLs" zu erzeugen. Aber was ist besser fürs Ranking? http://www.url.com/12_2.htm, http://www.url.com/url,12,2.htm oder doch lieber http://www.url.com/12/2/url/ Fragen zum URL-Design werden hier diskutiert.

Moderator: Super-Mod

Beitragvon Gumbo » 17.02.2009 10:58

Mache dazu zwei Regeln daraus:
Code: Alles auswählen
RewriteCond %{REQUEST_URI} !^/index\.php$
RewriteRule ^([^/]+)$ ?username=$1 [QSA]
RewriteRule ^([^/]+)/([^/]+)$ $2?username=$1 [QSA]
Markus Wulftange
Gumbo
Moderator
Moderator
 
Beiträge: 5019
Registriert: 07.01.2005 01:18
Wohnort: Trier

Beitragvon Waldgeist » 17.02.2009 11:40

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:
Waldgeist
.
.
 
Beiträge: 29
Registriert: 15.12.2008 19:56

Beitragvon Gumbo » 17.02.2009 12:13

Code: Alles auswählen
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)$ ?username=$1 [QSA]
RewriteRule ^([^/]+)/([^/]+)$ $2?username=$1 [QSA]
Markus Wulftange
Gumbo
Moderator
Moderator
 
Beiträge: 5019
Registriert: 07.01.2005 01:18
Wohnort: Trier

Beitragvon Waldgeist » 17.02.2009 12:57

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
Waldgeist
.
.
 
Beiträge: 29
Registriert: 15.12.2008 19:56

Beitragvon Waldgeist » 04.05.2009 08:45

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
Waldgeist
.
.
 
Beiträge: 29
Registriert: 15.12.2008 19:56

Beitragvon Gumbo » 04.05.2009 16:31

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.
Markus Wulftange
Gumbo
Moderator
Moderator
 
Beiträge: 5019
Registriert: 07.01.2005 01:18
Wohnort: Trier

Beitragvon Waldgeist » 04.05.2009 17:35

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
Waldgeist
.
.
 
Beiträge: 29
Registriert: 15.12.2008 19:56

Beitragvon Gumbo » 04.05.2009 17:58

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.
Markus Wulftange
Gumbo
Moderator
Moderator
 
Beiträge: 5019
Registriert: 07.01.2005 01:18
Wohnort: Trier

Beitragvon Waldgeist » 21.12.2009 18:34

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?
Waldgeist
.
.
 
Beiträge: 29
Registriert: 15.12.2008 19:56

Beitragvon Gumbo » 23.12.2009 15:26

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]
Markus Wulftange
Gumbo
Moderator
Moderator
 
Beiträge: 5019
Registriert: 07.01.2005 01:18
Wohnort: Trier

Beitragvon Waldgeist » 24.12.2009 14:22

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.
Waldgeist
.
.
 
Beiträge: 29
Registriert: 15.12.2008 19:56

Beitragvon Waldgeist » 04.01.2010 13:27

Ich nehme an, dass heißt nein :-) ?
Wäre auch merkwürdig wenn es gehen würde, aber so praktisch in meinem Fall. :roll:
Waldgeist
.
.
 
Beiträge: 29
Registriert: 15.12.2008 19:56

Beitragvon Gumbo » 07.01.2010 18:39

Nein, das ist nicht möglich. Du kannst wohl den Server so konfigurieren, dass ein virtueller Host für beide Domains zuständig ist.
Markus Wulftange
Gumbo
Moderator
Moderator
 
Beiträge: 5019
Registriert: 07.01.2005 01:18
Wohnort: Trier

Re: Umschreiben - generelle Verständnisfrage am Beispiel

Beitragvon Waldgeist » 11.09.2010 01:06

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 :-)
Waldgeist
.
.
 
Beiträge: 29
Registriert: 15.12.2008 19:56

Re: Umschreiben - generelle Verständnisfrage am Beispiel

Beitragvon Waldgeist » 11.09.2010 11:01

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 :)
Waldgeist
.
.
 
Beiträge: 29
Registriert: 15.12.2008 19:56

Vorherige

Zurück zu URL-Design

Wer ist online?

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

cron