David 2: RewriteRule, Einträge werden nicht richtig aufgelöst

Da ist wohl der Fehlerteufel in meiner htaccess

In meiner .htaccess habe ich folgende Einträge

RewriteRule ^namen_mit_([a-z])_([0-9]+).html 		index.php?page=namen&buchstabe=$1&nummer=$2 [L]
RewriteRule ^namen_mit_([a-z]+).html 				index.php?page=namen&buchstabe=$1 [L]

der zweite funktioniert:

Array ( [page] => namen [buchstabe] => a )

der erste nicht.

Hier bekomme ich

Array ( [page] => namen/namen_mit_b_4 )

David

  1. Du hast:

    RewriteRule ^namen_mit_([a-z])_([0-9]+).html
    

    Vermutlich willst Du

    RewriteRule ^namen_mit_([a-z]+)_([0-9]+).html
    
  2. Hallo David,

    Array ( [page] => namen/namen_mit_b_4 )

    Das kann nicht aus den beiden gezeigten Rewrite-Rules entstehen; die erzeugen MINDESTENS noch den key 'buchstabe' im Array. Hast Du noch mehr Rules?

    • welche URLs lässt Du auf diese Rules los (den Domain-Namen kannst Du durch example.com ersetzen, wenn deine Seite privat ist)
    • in welchem Ordner steht diese .htaccess?
    • In welchem Ordner steht die index.php?

    Rolf

    --
    sumpsi - posui - obstruxi
    1. Die Daten liegen auf meinem raspberrypi, bei mir zuhause

      http://raspberrypi/test

      Im test Verzeichnis liegt meine htaccess, in diesem Verzeichnis liegt auch die index.php

      RewriteEngine on
      RewriteBase /test/
      RewriteRule ^namen_mit_([a-z])_([0-9]+).html 		index.php?page=namen&buchstabe=$1&nummer=$2 [L]
      RewriteRule ^namen_mit_([a-z]+).html 				index.php?page=namen&buchstabe=$1 [L]
      RewriteRule ^(.*).html index.php?page=$1 [L]
      

      die Index habe ich reingemacht damit ich den Fehler sehe (was aber nichts nützt, weil ich es nicht verstehe 😭😱)

      David

      1. welche URLs lässt Du auf diese Rules los (den Domain-Namen kannst Du durch example.com ersetzen, wenn deine Seite privat ist)

        Und welches Ergebnis erwartest Du für diese. Bitte schön listen:

        • URL
        • erwartet

        • URL
        • erwartet

        1. Ich hoffe mal das ich deine Frage richtig verstehe.

          http://raspberrypi/test/adressen/namen_mit_a_1.html

          dann möchte ich

          http://raspberrypi/test/index.php?page=namen&buchstabe=a&nummer=1

          das haben

          1. Ich habe nicht an das Unterverzeichnis gedacht!

            RewriteRule ^test/namen_mit_([a-z])_([0-9]+).html

            jetzt geht es.

            Oje

            1. Hallo David,

              funktioniert

              das kann nach dem, was Du an Beispielen gegeben hast, nicht sein.

              • Wenn die .htaccess im test-Ordner steht, kommt das test/ in der RewriteRule nicht an.
              • Der adressen/ Teil in deiner URL steht nicht in der RewriteRule

              Hast Du eine weitere .htaccess im Webroot stehen, die den Rewrite behandelt? Weil Du eine RewriteBase setzt, liegt diese Vermutung nahe.

              Rolf

              --
              sumpsi - posui - obstruxi
          2. Hallo David,

            Ich hoffe mal das ich deine Frage richtig verstehe.

            Hast Du.

            Deine Rewrite-Rules geben die URL-Struktur, die Du da hereingibst, aber nicht wieder. Wenn die .htaccess im test-Order liegt, kommt

            http://raspberrypi/test/adressen/namen_mit_a_1.html

            in der RewriteRule als

            adressen/namen_mit_a_1.html

            an, d.h. das ist der String, auf den das Pattern in der RewriteRule passen muss.

            RewriteBase /test/

            Ich glaube, die RewriteBase stört hier nur, weil Du die .htaccess ja schon im test-Ordner drinstehen hast.

            Deine Rules müssten so aussehen:

            RewriteRule ^adressen/namen_mit_([a-z]+)_([0-9]+).html index.php?page=namen&buchstabe=$1&nummer=$2
            RewriteRule ^adressen/namen_mit_([a-z]+).html index.php?page=namen&buchstabe=$1
            

            Ob dieser Pfadteil "adressen/" nötig ist, kann man diskutieren. Technisch erforderlich ist das nicht, das ist deine persönliche Geschmacksentscheidung.

            Es hat vor allem Auswirkungen, wenn Du auf der so generierten Seite Ressourcen einbindest (CSS, JS, Bilder), denn der Browser meint ja, die Seite würde aus dem adressen-Ordner abgerufen. Ein HTML wie

            <img src="bild.jpg">
            

            würde dann aus dem adressen-Ordner abgerufen. Das muss man bei solchen Transformationen im Auge behalten.

            Da Du eh keine echten HTML Seiten abrufst, könntest Du das .html Suffix in den URLs auch weglassen. Es sei denn, du möchtest gern den Eindruck vortäuschen, eine unbeholfene statische Seitensammlung erstellt zu haben.

            Rolf

            --
            sumpsi - posui - obstruxi