basti1012: Variabeln aus Link sollen als Datei angezeigt werden .htaccess

Ich versuche die ganze Zeit meine Links ,die so aussehen

https://beispiel.de/ordner1/index.php?name=dateixy
https://beispiel.de/ordner2/index.php?name=dateixy
https://beispiel.de/ordner3/index.php?name=dateixy

Umzuwandeln , so das man sie im Browser so aufrufen kann

https://beispiel.de/ordner1/dateixy.html
https://beispiel.de/ordner2/dateixy.html
https://beispiel.de/ordner3/dateixy.html

Dazu habe ich in einer htaccess Datei das reingeschrieben

RewriteEngine On
RewriteBase /
RewriteRule ^/?ordner1/(.+)$ ordner1/index.php?name=$1 [L][R=301,L]

Habe die htaccess Datei im Root Vezeichniss getestet und auch versucht die jeweils in ordner 1,2,3 zutesten.

Habe es mal in einen Online Tester getestet Htaccess-tester

Gebe ich da meinen Fake Link ein https://beispiel.de/ordner1/dateixy.html Dann zeigt er mir unten das erwünschte Ergebniss an ( The new url is https://beispiel.de/ordner1/index.php?name=dateixy.html ). Da soll dann der Inhalt aus der Db geholt werden

Habe ich da irgendwas falsch verstanden ? Ich kam mit htaccess noch nie klar und werde es wohl nie verstehen . Kann mir einer helfen das ich das endlich zum laufen bekomme ?

  1. @@basti1012

    Ich versuche die ganze Zeit meine Links ,die so aussehen

    https://beispiel.de/ordner1/index.php?name=dateixy
    https://beispiel.de/ordner2/index.php?name=dateixy
    https://beispiel.de/ordner3/index.php?name=dateixy

    Umzuwandeln , so das man sie im Browser so aufrufen kann

    https://beispiel.de/ordner1/dateixy.html
    https://beispiel.de/ordner2/dateixy.html
    https://beispiel.de/ordner3/dateixy.html

    Bei dir ist nicht nur der letzte Teil des URLs variable, sondern auch der vorletzte.

    Du musst also nach sowas wie ^/?([^/]+)/(.+) suchen und durch $1/index.php?name=$2 ersetzen.

    😷 LLAP

    --
    „Dann ist ja auch schrecklich, dass wir in einem Land leben, in dem nicht nur Bildungswillige leben, sondern auch hinreichende Zahlen von Bekloppten. Das darf ich so locker formulieren, ich bin ja jetzt Rentner und muss nicht mehr auf jedes Wort achten.“
    — Joachim Gauck über Impfgegner
    1. Hallo Gunnar,

      stimmt schon, aber zumindest für "ordner1" hätte es ja funktionieren müssen, wenn der hardcoded in der rewrite rule steht.

      Ich bin ja bekanntlich kein Indianer aus dem Süden, sondern aus dem Nordwesten und verwende daher das Rewrite-Modul des IIS (mit dem man ebenfalls prima Zweikämpfe führen kann, aber es hat auch die nette Eigenschaft, einen "Rückwärts-Rewrite" im Output durchführen zu können) - aber mich deucht, dass die Flags falsch angegeben sind.

      Müssen nicht alle Options in EINEM [Klammerpaar] stehen?

      Und in Bastis Rule steht vorneweg noch ein /? - also optional ein / vornedran. Die Apache Doku sagt, dass der / zwischen Origin und Path nicht Teil des URL-Anteils ist, gegen den das Pattern gematcht wird. Dieses Stück Kunst kann demnach weg.

      Die Regel sollte so aussehen, meine ich:

      RewriteRule ^([^/]+)/(.+)$ $1/index.php?name=$2 [R=301,L]
      

      Die Bedeutung des L Flags ist Dir klar, Basti?

      Bei Problemen kann auch das Logging von mod_rewrite weiterhelfen.
      https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#logging

      Rolf

      --
      sumpsi - posui - obstruxi
      1. @@Rolf B

        Die Regel sollte so aussehen, meine ich:

        RewriteRule ^([^/]+)/(.+)$ $1/index.php?name=$2 [R=301,L]
        

        Ich meine, nicht. Durch [R=301] erscheint der hässliche URL mit index.php?name= in der Adressleiste – das ist doch genau das, was man nicht will.

        Und Suchmaschinen sollen ja auch den coolen URL (bspw. https://example.net/ordner1/dateixy.html) indizieren. Welcher Stauscode müsste es also sein? 🤔

        😷 LLAP

        --
        „Dann ist ja auch schrecklich, dass wir in einem Land leben, in dem nicht nur Bildungswillige leben, sondern auch hinreichende Zahlen von Bekloppten. Das darf ich so locker formulieren, ich bin ja jetzt Rentner und muss nicht mehr auf jedes Wort achten.“
        — Joachim Gauck über Impfgegner
        1. Moin Gunnar,

          Ich meine, nicht. Durch [R=301] erscheint der hässliche URL mit index.php?name= in der Adressleiste – das ist doch genau das, was man nicht will.

          Und Suchmaschinen sollen ja auch den coolen URL (bspw. https://example.net/ordner1/dateixy.html) indizieren. Welcher Stauscode müsste es also sein? 🤔

          Ich kaufe OK für 200 und möchte lösen.

          Viele Grüße
          Robert

          1. Hallo Robert,

            ich würde, nach Lektüre des Indianerhandbuchs, das R ganz weglassen. Wie Gunnar sagte: man möchte doch eigentlich nur dem Anwender eine "schöne" URL präsentieren und verbergen, dass da ein PHP Script steckt, das die Inhalte aus einer DB oder aus einem anderen klammen Kabuff im Kohlenkeller holt.

            Rolf

            --
            sumpsi - posui - obstruxi
      2. @@Rolf B

        Und in Bastis Rule steht vorneweg noch ein /? - also optional ein / vornedran. Die Apache Doku sagt, dass der / zwischen Origin und Path nicht Teil des URL-Anteils ist, gegen den das Pattern gematcht wird. Dieses Stück Kunst kann demnach weg.

        Das musste es bei mir auch. Ich hatte mich letztens auch mit RewriteRule abgerackert – hatte schon das Fenster offen, um hier im Forum einen Thread zu eröffnen, hatte es dann aber im letzten Moment doch noch selbst hinbekommen.

        Bei mir liegt die zuständige .htaccess-Datei aber nicht im Webroot-Ordner, sondern im Ordner der betreffenden Webseiten Star Trek series, und sieht so aus:

        Options -MultiViews
        RewriteEngine On
        RewriteBase /startrek/series
        RewriteCond %{REQUEST_URI} !index.php$
        RewriteCond %{REQUEST_URI} !\.jsonld$
        RewriteCond %{REQUEST_URI} !\.css$
        RewriteCond %{REQUEST_URI} !\.svg$
        RewriteRule (.+)$ index.php?series=$1
        

        Im selben Ordner befindliche JSON-LD-, CSS- und SVG-Ressourcen dürfen nicht weitergeleitet werden. Ebenfalls ausgeschlossen ist index.php – müsste @basti1012 das nicht auch tun?

        😷 LLAP

        --
        „Dann ist ja auch schrecklich, dass wir in einem Land leben, in dem nicht nur Bildungswillige leben, sondern auch hinreichende Zahlen von Bekloppten. Das darf ich so locker formulieren, ich bin ja jetzt Rentner und muss nicht mehr auf jedes Wort achten.“
        — Joachim Gauck über Impfgegner
        1. Moin Gunnar,

          Options -MultiViews
          RewriteEngine On
          RewriteBase /startrek/series
          RewriteCond %{REQUEST_URI} !index.php$
          RewriteCond %{REQUEST_URI} !\.jsonld$
          RewriteCond %{REQUEST_URI} !\.css$
          RewriteCond %{REQUEST_URI} !\.svg$
          RewriteRule (.+)$ index.php?series=$1
          

          Im selben Ordner befindliche JSON-LD-, CSS- und SVG-Ressourcen dürfen nicht weitergeleitet werden. Ebenfalls ausgeschlossen ist index.php – müsste @basti1012 das nicht auch tun?

          Im Allgemeinen ist eine Rewrite-Bedingung doch, dass der REQUEST_FILENAME nicht direkt im Dateisystem vorhanden ist:

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

          Viele Grüße
          Robert

  2. Moin,

    Ich versuche die ganze Zeit meine Links ,die so aussehen

    https://beispiel.de/ordner1/index.php?name=dateixy
    https://beispiel.de/ordner2/index.php?name=dateixy
    https://beispiel.de/ordner3/index.php?name=dateixy

    Umzuwandeln , so das man sie im Browser so aufrufen kann

    https://beispiel.de/ordner1/dateixy.html
    https://beispiel.de/ordner2/dateixy.html
    https://beispiel.de/ordner3/dateixy.html

    Dazu habe ich in einer htaccess Datei das reingeschrieben

    RewriteEngine On
    RewriteBase /
    RewriteRule ^/?ordner1/(.+)$ ordner1/index.php?name=$1 [L][R=301,L]
    

    Dein regulärer Ausdruck matcht den gesamten String hinter ordner1/, also dateixy.html:

    Gebe ich da meinen Fake Link ein https://beispiel.de/ordner1/dateixy.html Dann zeigt er mir unten das erwünschte Ergebniss an ( The new url is https://beispiel.de/ordner1/index.php?name=dateixy.html ). Da soll dann der Inhalt aus der Db geholt werden

    Ist das Ergebnis wirklich das „erwünschte“? Deine Beschreibung oben ließe etwas Anderes erwarten.

    Habe ich da irgendwas falsch verstanden?

    Das kommt darauf an, was du genau möchtest.

    Ich kam mit htaccess noch nie klar und werde es wohl nie verstehen.

    Das hat mit htaccess nichts zu tun, sondern mit regulären Ausdrücken.

    Viele Grüße
    Robert

  3. @@basti1012

    Ich versuche die ganze Zeit meine Links ,die so aussehen

    https://beispiel.de/ordner1/index.php?name=dateixy

    Für Beispieldomains gibt es gegistrierte Namen wie example.net [RFC2606] (für Beispieldomains in anderen Schriften als der lateinischen siehe [IANA]).

    beispiel.de gehört nicht dazu. Das Wiki sagt zwar „Seit 2018 lässt sich auch die Seite beispiel.de als Beispieldomain nutzen“, ich bin mir aber nicht sicher, ob es das so sagen sollte. Meine Bedenken hatte ich geäußert.

    😷 LLAP

    --
    „Dann ist ja auch schrecklich, dass wir in einem Land leben, in dem nicht nur Bildungswillige leben, sondern auch hinreichende Zahlen von Bekloppten. Das darf ich so locker formulieren, ich bin ja jetzt Rentner und muss nicht mehr auf jedes Wort achten.“
    — Joachim Gauck über Impfgegner