Nichtskönner: Modrewrite .htacces

Hallo,

bisher rufen wir eine spezielle URL immer auf http://exampel.com/buch/?sub=oisdfsd

Gewünscht ist:
http://exampel.com/buch/oisdfsd

Meine überlegte Regel für die .htacces ist:

RewriteEngine on  
RewriteRule ^/buch/([0-9]+)$ /buch/index.php?sub=$1

Leider führt das nur zu einem 404.

Danke für eure Hilfe
Nichtskönner

  1. Ahoi,

    RewriteRule ^buch/([0-9]+)$ buch/index.php?sub=$1 [L]

    Außerdem fehlt "nicht aber 'buch/index'", was entweder in dem Rule eingebaute werden müsste (^index) oder so, oder in einer RewriteCond .. "!^buch/index".*" oder so ähnlich.

    Dank und Gruß,

    frankx

    1. Hallo Frankx,

      ich habe es leider nicht verstanden was du mir sagen möchtest.

      Danke
      Nichtskönner

      Ahoi,

      RewriteRule ^buch/([0-9]+)$ buch/index.php?sub=$1 [L]

      Außerdem fehlt "nicht aber 'buch/index'", was entweder in dem Rule eingebaute werden müsste (^index) oder so, oder in einer RewriteCond .. "!^buch/index".*" oder so ähnlich.

      Dank und Gruß,

      frankx

      1. Ahoi,

        Hallo Frankx,

        ich habe es leider nicht verstanden was du mir sagen möchtest.

        Enferne vielleicht den beginnenden Slash. Setzt [L] damit die Ausführung zu beenden, was aber u.U. nichts hilft, weil irgendwie intern nochmal gerewritten wird und dann wird immer "buch am anfang" gefunden. Das soll aber nur umgeschrieben werden, wenn "buch aber nicht gefolgt von slash-index.html" da steht.

        »» RewriteRule ^buch/([0-9]+)$ buch/index.php?sub=$1 [L]
        »»
        »» Außerdem fehlt "nicht aber 'buch/index'", was entweder in dem Rule eingebaute werden müsste (^index) oder so, oder in einer RewriteCond .. "!^buch/index".*" oder so ähnlich.

        Dank und Gruß,

        nixerklärenkönnender

        frankx

        1. echo $begrüßung;

          » ich habe es leider nicht verstanden was du mir sagen möchtest.

          @Nichtskönner: Der Unterschied war der / am Anfang, falls du das übersehen hast.

          Enferne vielleicht den beginnenden Slash. Setzt [L] damit die Ausführung zu beenden, was aber u.U. nichts hilft, weil irgendwie intern nochmal gerewritten wird und dann wird immer "buch am anfang" gefunden.

          Eben. Das L-Flag steht nur für das Ignorieren aller nachfolgenden Regeln in dieser Konfigurationsdatei. Durch den internen Redirect (anders ist mod_rewrites Arbeitsweise in einer Verzeichniskonfigurationsdatei nicht möglich) kommt es immer dann zu einer erneuten Bearbeitung gemäß der notierten Regeln, wenn der Request im gleichen Verzeichnis bleibt. Man sollte mit zwei RewriteCond(itionen) dafür sorgen, dass real existiertende Verzeichnisse und Dateien von der nachfolgend zu notierenden Regel ausgeschlossen werden.

          RewriteCond %{REQUEST_FILENAME} !-d
          RewriteCond %{REQUEST_FILENAME} !-f

          echo "$verabschiedung $name";