rewrite mit verschiedenen Endungen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
artikel
aufruf
aussuchen
code
ende
endung
entscheiden
erledigen
falle
filtern
fragezeichen
funktionieren
klammern
liste
punkt
regel
regeln
teil
url
version
-
Hallo
ich habe ein Rewrite Regel, die funktionieren soll,
egal ob im Aufruf (URL) ein Slash / am Ende ist oder nicht, oder ein .html oder ein .htm
OK, ich kann einfach alle Regeln in die .htaccess untereinander schreiben
ohne Slash / am Ende:
RewriteRule ^([^\/]*)\/([^\/]*)$ artikel.php?a=$1&b=$2 [L,QSA]
mit Slash / am Ende:
RewriteRule ^([^\/]*)\/([^\/]*)\/$ artikel.php?a=$1&b=$2 [L,QSA]
mit .html am Ende:
RewriteRule ^([^\/]*)\/([^\/]*)\.html$ artikel.php?a=$1&b=$2 [L,QSA]
mit .htm am Ende:
RewriteRule ^([^\/]*)\/([^\/]*)\.htm$ artikel.php?a=$1&b=$2 [L,QSA]
---> aber kann man das nicht auch in einer Zeile erledigen,
so dass Aufruf mit Slash oder ohne Slash oder mit .htm oder mit .html funktioniert
... also sowas wie ein "entweder .. oder" ... bzw. .... Liste erlaubter / möglicher Endungen
irgendwas in Klammern mit ? Fragezeichen und | Oder Zeichen ... aber wie
Beitrag zuletzt geändert: 14.9.2012 10:47:37 von sportinfo -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ja, das geht in einer Regel:
RewriteRule ^([^\/]*)\/([^\/]*)(\/?|\.html?)$ artikel.php?a=$1&b=$2 [L,QSA]
Bei der letzten Matching-Group wird geprüft, ob "ein oder kein Slash am Ende ist" oder "ob .htm oder .html" da steht. -
hmmm , naja, fast ...
wenn ich jetzt Aufruf machen wie/xxxxx/yyyyy.html
dann ist in der artikel.php als $_GET['b'] = yyyyy.html
also das .html wird mit in der GET-Variable übergeben ?
obwohl es doch Teil der Rewrite-Regel ist ... bei Slash / am Ende passiert das nicht
ok, das könnte ich mit einem str_replace() wieder raus filtern,
aber schöner wäre halt doch gleich in $_GET ohne Datei-Endung
-
sportinfo schrieb:
Es gäbe auch eine weitere Möglichkeit, bei der alles nach dem 2. Slash oder dem Punkt ignoriert wird:
hmmm , naja, fast ...
Welche Version deinen Ansprüchen besser entspricht musst du entscheiden.RewriteRule ^([^\/]+)\/([^\/\.]+) artikel.php?a=$1&b=$2 [L,QSA]
Wenn du thomasba's Version verwenden willst kannst du sie wie folgt anpassen, das sollte dein Problem lösen:RewriteRule ^([^\/]*)\/([^\/\.]*)(\/?|\.html?)$ artikel.php?a=$1&b=$2 [L,QSA]
Beitrag zuletzt geändert: 14.9.2012 11:53:26 von hackyourlife -
In dem Falle wäre es wohl am einfachsten "Ungreedy" zu matchen, das geht mit
*?
Dann würde es so aussehen:
RewriteRule ^([^\/]*)\/([^\/]*?)(\/?|\.html?)$ artikel.php?a=$1&b=$2 [L,QSA]
-
vielen Dank
habe alle drei "neuen" Versionen ausprobiert, und die funktionieren alle :)
RewriteRule ^([^\/]+)\/([^\/\.]+) artikel.php?a=$1&b=$2 [L,QSA] RewriteRule ^([^\/]*)\/([^\/\.]*)(\/?|\.html?)$ artikel.php?a=$1&b=$2 [L,QSA] RewriteRule ^([^\/]*)\/([^\/]*?)(\/?|\.html?)$ artikel.php?a=$1&b=$2 [L,QSA]
jetzt kann ich mir ja eine aussuchen ... mal würfeln ...
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage