Zur Navigation

Short URL erstellen

1 Pascall (Gast)

Hallo,

es ist schwer, mein anliegen auf den Punkt zu bringen, darum dieser schlecht gewählte Titelname.

Ich habe folgende Frage/ Anliegen.

Ich möchte ein PHP Script erstellen. Bei diesem Script werden alle Aufrufe über die index.php gesteuert ( index.php?d=kategorie&s=2 ).

Im Moment löse ich es wir folgt:

RewriteRule ^(.*)-(.*)/$ index.php?d=$1&s=$2
RewriteRule ^(.*)-(.*)$ index.php?d=$1&s=$2

Es funktioniert auch soweit:

www.domain.de/kategorie-2

Allerdings ist es mir nicht möglich
www.domain.de/kategorie
zu schreiben.

Was ich gern hätte:
www.domain.de/sport <- zeigt die Kategorie
und
www.domain.de/sport/artikelname <- den Artikel

RewriteRule ^(.*)$ index.php?d=$1
So bekomme ich einen Fehler.

RewriteRule ^(.*)/(.*)$ index.php?d=$1&s=$2
So geht`s auch nicht.

Ich hoffe, ich verlange nicht zu viel und würde mich auf Antwort wirklich sehr freuen.

Gruß,
Pascal

25.01.2012 13:38

2 AndiN

Hallo Pascal,
ungetestet evtl. so?

RewriteRule ^(.*)/$1 index.php?d=$1&s=$2

Gruß,
Andreas

25.01.2012 13:44

3 Jörg Kruse

RewriteRule ^(.*)$ index.php?d=$1
So bekomme ich einen Fehler.

Die genaue Fehlermeldung wäre hier interressant

Ich vermute mal, dass du mit "([^\-]*)" anstelle von "(.*)" weiterkommst, da dann darin der Bindestrich ausgeschlossen ist und sich die Rules so nicht gegenseitig in die Quere kommen

25.01.2012 13:54 | geändert: 25.01.2012 13:55

4 Pascall (Gast)

Ich habe es jetzt so versucht:
RewriteRule ^([^\-]*)$ /index.php?d=$1

Jetzt werde ich auf den xampp ordner umgeleitet und
RewriteRule ^([^\-]*)$ index.php?d=$1

Wird mir "index.php" ausgegeben.

Schonmal besten Dank für die Hilfe!

25.01.2012 13:59

5 Pascall (Gast)

Zur ergänzung:
in der Index.php steht im Moment:
echo $_GET['d'];
echo "<br/>";
echo $_GET['s'];

25.01.2012 14:08

6 Pascall (Gast)

Ich habe es nun soweit:

RewriteRule ^(.*)$ index.php?d=$1 [PT,L,QSA]

Anscheinend war der Zusatz : [PT,L,QSA] , der gefehlt hat.

Jetzt habe ich nurnoch eine Frage:
Um nun alle GET Parameter abzufragen muss ich nun:

RewriteRule ^(.*)/(.*)/(.*)/$ index.php?d=$1&s=$2&g=$3 [PT,L,QSA]
RewriteRule ^(.*)/(.*)/(.*)$ index.php?d=$1&s=$2&g=$3 [PT,L,QSA]
RewriteRule ^(.*)/(.*)/$ index.php?d=$1&s=$2 [PT,L,QSA]
RewriteRule ^(.*)/(.*)$ index.php?d=$1&s=$2 [PT,L,QSA]
RewriteRule ^(.*)/$ index.php?d=$1 [PT,L,QSA]
RewriteRule ^(.*)$ index.php?d=$1 [PT,L,QSA]

Geht das auch dynamischer? Das automatisch ein "/" zum nächsten Parameter verweist?

Vielen Dank nochmal



25.01.2012 14:38

7 Jörg Kruse

Ich habe es jetzt so versucht:
RewriteRule ^([^\-]*)$ /index.php?d=$1

Jetzt werde ich auf den xampp ordner umgeleitet und

Ja, wegen des Slash am Anfang erfolgt eine Weiterleitung.

Ich habe es nun soweit:

RewriteRule ^(.*)$ index.php?d=$1 [PT,L,QSA]

Anscheinend war der Zusatz : [PT,L,QSA] , der gefehlt hat.

Genau genommen sind das drei Zusätze = Flags. Das L Flag verhindert, dass bei Zutreffen der Rule weitere Rules ausgeführt werden. Ob du die anderen beiden Flags hier noch benötigst, ist allerdings fraglich (wenn dann zu anderen Zwecken)

Jetzt habe ich nurnoch eine Frage:
Um nun alle GET Parameter abzufragen muss ich nun:

RewriteRule ^(.*)/(.*)/(.*)/$ index.php?d=$1&s=$2&g=$3 [PT,L,QSA]
RewriteRule ^(.*)/(.*)/(.*)$ index.php?d=$1&s=$2&g=$3 [PT,L,QSA]
RewriteRule ^(.*)/(.*)/$ index.php?d=$1&s=$2 [PT,L,QSA]
RewriteRule ^(.*)/(.*)$ index.php?d=$1&s=$2 [PT,L,QSA]
RewriteRule ^(.*)/$ index.php?d=$1 [PT,L,QSA]
RewriteRule ^(.*)$ index.php?d=$1 [PT,L,QSA]

Geht das auch dynamischer? Das automatisch ein "/" zum nächsten Parameter verweist?

Das nicht, aber du könntest noch jeweils zwei Rules zu einer zusammenfassen, indem du mit einem "?" den abschließenden Slash optional machst

RewriteRule ^(.*)/(.*)/(.*)/?$ index.php?d=$1&s=$2&g=$3 [PT,L,QSA]

25.01.2012 14:52

8 Pascall (Gast)

Danke für die Antwort.

Ich habe es nun so gelöst:
RewriteRule ^(.*)/(.*)/(.*)/?$ index.php?d=$1&s=$2&g=$3 [L,QSA]
RewriteRule ^(.*)/(.*)/?$ index.php?d=$1&s=$2 [L,QSA]
RewriteRule ^(.*)/?$ index.php?d=$1 [L,QSA]

Wenn ich das QSA weglasse, funktioniert es nichtmehr. Allerdings gibt es keine veränderung, wenn ich das PT weglasse.

Das sollte so auch schon reichen.
Vielen Dank für die Unterstützung.

Gruß,
Pascal

25.01.2012 15:45

9 Pascall (Gast)

Hallo nochmal,

es hat sich doch noch eine Frage ergeben.
Ich habe nun einen Unterordner ( admin ) oder auch Dateien ( .js ) , auf denen ich nun nicht zugreifen kann, weil der Redirect im weg ist.

Gibt es dir Möglichkeit, Dateien und Ordner außenvor zulassen, so das sie ignoriert werden?

Gruß,
Pascal

26.01.2012 08:49

10 Jörg Kruse

Ich würde in den Klammerausdrücken den Punkt ausnehmen ("([^\.]*)"), dann werden keine Dateien mit Extension rewritet. Für das Verzeichnis /admin könnte man vor der letzten Rule in einer RewriteCond eine Ausnahme definieren

RewriteCond %{REQUEST_URI} !^admin/
RewriteRule ^([^\.]*)/?$ index.php?d=$1 [L,QSA]

Falls das Admin-Verzeichnis selbst noch Unterverzeichnisse hat, musst du die Ausnahmen weiter oben natürlich auch noch entsprechend definieren

26.01.2012 09:53