htaccess RewriteRule, nur einen Parameter verarbeiten

  • Guten Tag.


    Ich bin gerade dabei die URLs meiner Webseite etwas aufzubereiten.

    Die Situation ist folgende: Der Inhalt der Webseiten wird dynamisch aus Datenbank Inhalten generiert.

    mittels GET['page'] wird geprüft welche Seite dargestellt werden soll.


    Nun möchte ich aber nicht

    https://www.mypage.com/index.php?page=home

    in der URL Zeile stehen haben sondern

    https://www.mypage.com/home


    Dies ist mir bereits mit folgender .htaccess Datei gelungen:

    Apache Configuration
    RewriteEngine On
    RewriteRule ^(.*)?$ index.php?page=$1 [QSA,NC,L]


    Das Problem hierbei ist aber, das weitere GET Variablen ignoriert werden. Manche Pages nutzen zusätzliche Variablen z.B. eine ID.

    https://backend.mypage.com/products?id=5


    Ich weiß es gibt Möglichkeiten um mehrere GET Variablen mit / an die URL anzuhängen (z.B. .../products/5), was aber einige Änderungen mit sich bringen würde, vor allem im selbst entworfenen Backend wo durchaus mal 5 Variablen in der URL Zeile stehen.


    Daher meine Frage:

    Wie setze ich das um, das RewriteRule nur die 'page' Variable umleitet und die restlichen einfach ignoriert und somit dahinter schreibt?


    Ich verbrachte bereits stunden damit, die Goolgle Suche zu bemühen und mögliche Lösungsvorschläge auszuprobieren, aber ohne erfolg. Hoffe es kann mir hier jemand helfen.

    Dankeschön

    DevOps Engineer (Kubernetes Infrastruktur Manager)

  • Wie setze ich das um, das RewriteRule nur die 'page' Variable umleitet und die restlichen einfach ignoriert und somit dahinter schreibt?

    Damit wir uns richtig verstehen – Ein Aufruf von (nicht-existierenden) Dateien/Links/Unterverzeichnissen eines einzelnen Verzeichnisses soll derart weitergeleitet werden auf index.php, so dass alle bereits vorhandenen Parameter sowie ein neuer namens "page" mit dem ursprünglichen Datei-/Link-/Verzeichnisnamen (welcher seinerseits "/" nicht enthält, sonst läge er ja nicht mehr im aktuellen Verzeichnis) übergeben werden, so dass ein Aufruf von var_dump($_GET); in index.php das Folgende ausgibt?

    • Beispielaufruf: http[s]://domain.tld[/path-to-directory]/gibtsnich?arg1=hallo&arg2=welt
    • Beispielausgabe: array(3) { ["page"]=> string(9) "gibtsnich" ["arg1"]=> string(5) "hallo" ["arg2"]=> string(4) "welt" }

    Das habe ich mit diesem Beispiel direkt nachvollziehen können.

    VServer IOPS Comparison Sheet: https://docs.google.com/spreadsheets/d/1w38zM0Bwbd4VdDCQoi1buo2I-zpwg8e0wVzFGSPh3iE/edit?usp=sharing