HTACCESS Rewrite über ein Verzeichnis...<Problem>
Dan68
- webserver
0 Dan680 Edgar Ehritt0 Dan68
Hi
Meine Frage:
Dies der betreffende Teil der htaccess:
RewriteCond %{REQUEST_FILENAME} /mitglied-([a-zA-Z0-9-]*).html
RewriteRule (.*) /member.php?recordID=%1 [L]
aus
"domain/mitglied-pete-bauer.html"
wird
"domain/member.php?id=pete-bauer"
was auch funktionioniert.
Wie muss ich es anstellen, das es aus einem Verzeichnis (hier "verein" heraus auch funktioniert, z.B.:
"domain/verein/mitglied-pete-bauer.html"
Ich dachte so, was aber einen 404er bringt:
RewriteCond %{REQUEST_FILENAME} /([a-zA-Z0-9-]*)/mitglied-([a-zA-Z0-9-]*).html
RewriteRule (.*) /member.php?recordID=%2 [L]
Was ist daran falsch, die "2" bei member ist doch richtig.
Update:
bei:
RewriteCond %{REQUEST_FILENAME} /([a-zA-Z0-9-]*)/mitglied-([a-zA-Z0-9-]*).html
RewriteRule (.*) /member.php?recordID=%2 [L]
muss die "member.php" auch im verzeichnis "verein" liegen. Das habe ich eben rausgefunden.
Wie kann ich es einrichtem, so dass "/member.php?recordID=%2" aber von der "root" aus anspricht?
Hallo Dan68,
RewriteCond %{REQUEST_FILENAME} /mitglied-([a-zA-Z0-9-]*).html
RewriteRule (.*) /member.php?recordID=%1 [L]
>
> aus
> "domain/mitglied-pete-bauer.html"
> wird
> "domain/member.php?id=pete-bauer"
nein: domain/member.php?recordID=pete-bauer
> Wie muss ich es anstellen, das es aus einem Verzeichnis (hier "verein" heraus auch funktioniert, z.B.:
> "domain/verein/mitglied-pete-bauer.html"
>
> Ich dachte so, was aber einen 404er bringt:
> ~~~apache
RewriteCond %{REQUEST_FILENAME} /([a-zA-Z0-9-]*)/mitglied-([a-zA-Z0-9-]*).html
> RewriteRule (.*) /member.php?recordID=%2 [L]
Zunächst erstmal folgendes zum Verständnis: Die Variable %{REQUEST_FILENAME}
hat mit den Angaben des Requests direkt nichts zu tun. Sie beinhaltet den absoluten Pfad der angeforderten Datei (im Eigentlichen also einer Ressource) im Dateisystem. Im einfachsten Fall besteht sie aus der mit der Direktive DocumentRoot angegebenen Basis plus Pfadangaben in %{REQUEST_URI}
.
Von Deiner Aufgabenstellung her willst Du aber die Pfadangabe der Anfrage ("domain/mitglied-pete-bauer.html" bzw. "domain/verein/mitglied-pete-bauer.html") verarbeiten. Damit wird offensichtlich, dass Du bereits in den Grundlagen, wenn Du gegen %{REQUEST_FILENAME}
prüfst, fehlgehst. %{REQUEST_URI}
ist also die Variable, die den zu analysierenden Pfad enthält.
Denn für den Fall, dass DocumentRoot "/usr/web" wäre, ist für die Anfrage an http://domain/verein/mitglied-pete-bauer.html der Wert von %{REQUEST_FILENAME}
"/usr/web/verein/mitglied-pete-bauer.html". Dieses passt nicht auf das CondPattern "/([a-zA-Z0-9-]*)/mitglied-([a-zA-Z0-9-]*).html"
RewriteRule prüft (im ersten Durchlauf) gegen den URL-Pfad der Anfrage. Das entspricht %{REQUEST_URI}
. RewriteCond bedarf es also nicht:
RewriteRule /mitglied-([a-zA-Z0-9-]*).html$ /member.php?recordID=$1 [L]
Gruß aus Berlin!
eddi
Das funktioniert und kenne ich ja eigentlich auch schon...Hmmm
Danke!
RewriteRule /mitglied-([a-zA-Z0-9-]*).html$ /member.php?recordID=$1 [L]
Aber jetzt wird der vorgesetze Ordner auch mit "übernommen"
Beispiel: aus
http://domain/verein/mitglied-pete-bauer.html"
wird
http://domain/verein/member.php?recordID=pete-bauer"
"../verein/member.php..." gibt es aber nicht, aus div. techn. Gründen, es ist ja auch nur ein Testbeispiel).
Ds Ziel muss sein:
http://domain/member.php?recordID=pete-bauer" (ohne "den ordner "verein")
Wie bekommt man das hin?
Re:
Das funktioniert und kenne ich ja eigentlich auch schon...Hmmm
Danke!
RewriteRule /mitglied-([a-zA-Z0-9-]*).html$ /member.php?recordID=$1 [L]
Es funktioniert - aber auch nur irgendwie. Intern wird hierbei auch http://domain/verein/mitglied-pete-bauerrhtml zu http://domain/verein/member.php?recordID=pete-bauer. Punkte in Regulären Ausdrücken müssen maskiert werden:
RewriteRule /mitglied-([a-zA-Z0-9-]*)\.html$ /member.php?recordID=$1 [L]
Da es sich ohnehin um virtuelle Adressen handelt, könnte man meiner Meinung nach auf die Erweiterung ".html" auch gleich verzichten.
Ds Ziel muss sein:
http://domain/member.php?recordID=pete-bauer" (ohne "den ordner "verein")
Du kannst die Regeln verschachteln:
RewriteRule ^/verein/mitglied-([a-zA-Z0-9-]*)\.html$ /mitglied-$1.html
RewriteRule /mitglied-([a-zA-Z0-9-]*)\.html$ /member.php?recordID=$1 [L]
Erst mit der Flag [L] wird abgeschlossen und keine weiteren (möglicherweise nachfolgende) Regeln wirken ein, während alle vorherigen den Request häppchenweise umwandeln können.
Gruß aus Berlin!
eddi