Hilfe bei Regex und Modewrite

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Hilfe bei Regex und Modewrite

    Hallo,

    ich programmiere gerade ein CMS ein bisschen um. In der htaccess-Datei ist ein eine Rewrite-Regel hinterlegt, die in etwa so aussieht:

    Quellcode

    1. RewriteRule ([^/]+)/?$ index.php?main=frontend&alias=$1


    Der Regex nimmt einen String und matcht immer das letzte Element in einem Pfad, z.B.

    hauptseite
    hauptseite/unterseite/unterunterseite

    usw.

    Ich denke das Prinzip ist klar. So einen Regex habe ich von der Form her nur noch nie gesehen. Eig. dachte, die sehen immer in etwa so aus: "/^[regex-cocde]$/" oder "/[regex-code]/".

    Ich will den Ausdruck so anpassen, dass der z.B. nur matcht, wenn in der Wurzel des Pfades "blog" steht. Z.B. so


    Quellcode

    1. RewriteRule /blog/([^/]+)/?$ index.php?main=frontend&alias=$1
    Ich will aber immer noch das letzte Element des Pfades an PHP übergeben. Also z.B.

    blog/2015-10-26/ein-blogpost => index.php?main=frontend&alias=ein-blogpost


    Für Vorschläge und Anregungen bin ich ich dankbar. Ein Tutorial, das genau diese Fall abdeckt könnte ich noch nicht finden.

    Viele Grüße

  • jopjip schrieb:

    Eig. dachte, die sehen immer in etwa so aus: "/^[regex-cocde]$/" oder "/[regex-code]/".
    Lass' dich durch die Slashes in der Regex nicht verwirren. Da sind tatsächlich Slashes (bzw. [^/] für kein Slash) gemeint.

    Woran du wahrscheinlich denkst, sind einige Programmiersprachen (z. B. JavaScript, Perl) und UNIX-Tools (z. B. sed(1), awk(1)), die ihre regulären Ausdrücke über ein Markierungszeichen begrenzen. Das ist in der Regel der Slash, kann manchmal aber auch ein anderes Zeichen sein. Mod Rewrite braucht keine Begrenzungszeichen bzw. verwendet dafür der Einfachheit halber Leerzeichen. ;)
    „Meine Komplikation hatte eine Komplikation.“
  • macmoonshine schrieb:

    Lass' dich durch die Slashes in der Regex nicht verwirren. Da sind tatsächlich Slashes (bzw. [^/] für kein Slash) gemeint.

    Woran du wahrscheinlich denkst, sind einige Programmiersprachen (z. B. JavaScript, Perl) und UNIX-Tools (z. B. sed(1), awk(1)), die ihre regulären Ausdrücke über ein Markierungszeichen begrenzen. Das ist in der Regel der Slash, kann manchmal aber auch ein anderes Zeichen sein. Mod Rewrite braucht keine Begrenzungszeichen bzw. verwendet dafür der Einfachheit halber Leerzeichen.
    Das war eigentlich auch soweit klar. Es ging eher um die Zeichen, die das den Anfang und das Ende einen Strings markieren. Ich dachte immer, dass "^" und "$" nur zusammen verwendet werden können, dass "$" auch unabhängig von "^" vorkommen darf, war mir neu.