• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

2 Fragen zu mod rewrite (Apache)

zoom

Antonowka
Registriert
06.03.06
Beiträge
356
Moin!

  1. Ich habe eine .htaccess mit folgenden Rewrite-Regeln erstellt:
    Code:
    RewriteEngine on
    RewriteRule ^(.*)/(.*)/(.*)/$ index.php?eins=$1&zwei=$2&drei=$3 [L]
    RewriteRule ^(.*)/(.*)/$ index.php?eins=$1&zwei=$2 [L]
    RewriteRule ^(.*)/$ index.php?eins=$1
    Ich füge die Inhalte dann mit php per include in meiner index-Datei ein. Die Inhalte ergeben sich aus den Parametern eins, zwei, drei. Die eingefügten Dateien liegen im Ordner inhalt. Wenn ich die Datei hallo.php aus dem Ordner Inhalt in meiner index-Datei einfügen möchte, dann kann ich das per index.php?eins=hallo tun. Dabei lassen sich relative Pfade für zum Beispiel externe CSS-Dateien und Bilder verwenden. Sobald ich hallo.php aber per hallo/ aufrufe, muss ich absolute Pfade zu CSS-Dateien und Bilder einfügen. Woran liegt das?
  2. Ich möchte domain.de/hallo aufrufen können. Das ist momentan nicht möglich. Es funktioniert nur die URL domain.de/hallo/. Wie kann ich das Problem lösen. Vermutlich muss ich die .htaccess anpassen?
Kann mir jemand bei den Fragen helfen?

Gruß zoom
 

apfelq

Braeburn
Registriert
10.10.08
Beiträge
42
zu eins. ja das ist ganz normal da für (da bin ich mir nicht sicher aber ich glaube der DOM ist schuld) domain.de/hallo/ das ist ja eigentlich ein ordern und solang du domain.de/hallo/style.css nicht in diesem ordner hast (was eigentlich nicht geht, da dieser ordern nur vorgekaukelt wird) wird er keine css datei finden. da gibts aber ein trick

<link rel="stylesheet" type="text/css" href="/style.css" media="screen" />

der slash nach vor dem style.css ist wichtig, aber pass auf es muss der komplette pfad sein der nach .de kommt.

zu zwei. wenn du den code hier benutzst wird es ganz sicher funktionieren

Code:
RewriteEngine on

RewriteRule ^([^/.]+)/?$ index.php?eins=$1 [NC]
RewriteRule ^([^/.]+)/([^/.]+)/?$ index.php?eins=$1&zwei=$2 [NC]
RewriteRule ^([^/.]+)/([^/.]+)/([^/.]+)/?$ index.php?eins=$1&zwei=$2&drei=$3 [NC]

NC hebt die casesensitivity auf. ich glaube dein code funktioniert nicht weil du kein fragezeichen vor dem ersten dollarzeichen hast.
 
  • Like
Reaktionen: zoom

zoom

Antonowka
Registriert
06.03.06
Beiträge
356
Vielen Dank apfelq.

Zur ersten Frage: der relative Pfad nach dem .de reicht leider nicht aus. Ich habe den kompletten Pfad angegeben. Ansonsten kommt es zu Komplikationen.

Zur zweiten Frage: Ich habe deinen Code übernommen. Der funktioniert in der Tat wunderbar. nun kann ich domain.de/home sowie domain.de/home/ aufrufen. Was muss ich definieren, wenn domain.de/home in der Adresszeile zu domain.de/home/ führen soll? Im Moment bleibt die URL einfach ohne / stehen.

gruß zoom

Edit: Was ist der Unterschied zwischen ([^/.]+) und (.*)?
 

bond

Erdapfel
Registriert
02.03.09
Beiträge
5
Code:
([^/.]+)
Ein beliebiges Zeichen, aber kein Slash, muss mindestens 1 Mal vorkommen.

Code:
(.*)
Alle Zeichen, beliebig viele davon (insb. auch keine).