RewriteRule, wenn die Substitutionszeichenfolge kein Dateipfad, sondern eine URL ist, die von den nächsten Regeln verarbeitet werden soll

Lesezeit: 3 Minuten

Ich freue mich über jede Anfrage

example.com/foo/anything

umgeschrieben werden example.com/foo-anything bevor sie von WordPress verarbeitet werden.

Ich habe das versucht:

RewriteEngine On
RewriteRule ^foo/(.*)   foo-$1       # <-- does not work because the subs. string should be a *file path*

# The following is set by WordPress
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

aber es funktioniert nicht, weil die Substitutionszeichenfolge (Zielzeichenfolge) ein Dateipfad sein soll, keine andere URL.

Wie erstellt man eine solche RewriteRule, bei der die Substitutionszeichenfolge kein Dateipfad, sondern eine URL ist, die von den nächsten Regeln verarbeitet werden soll?

Anmerkungen:

  • Mit RewriteRule ^foo/(.*) foo-$1 [R]es funktioniert, aber dann verursacht es eine Browserumleitung und die URL ändert sich in der URL-Leiste des Browserswas ich nicht will.

  • Ich habe es mit versucht RewriteRule-Flag [PT] was auch funktionieren sollte, wenn die Substitutionszeichenfolge kein Dateipfad ist, aber es hat bei mir nicht funktioniert: es wird nicht umgeleitet /foo/anything zu Seite /foo-anything.

  • Ich habe es versucht

       RewriteRule ^foo/(.*)   index.php?name=foo-$1  [L]
    

    aber dann funktioniert es nur für Artikel, aber nicht Seiten. Ich hätte gerne eine Lösung, die sowohl für Seiten als auch für Artikel funktioniert.

  • Ich bin mir ziemlich sicher, dass dies zumindest teilweise ein WordPress-Problem ist. Es analysiert die ursprünglich angeforderte URL und übernimmt keine intern Umschreibungen berücksichtigt. (Wenn ja, dann würde das Ganze erstmal nicht funktionieren, weil es dann immer nur sehen würde /index.phpund hätte keine Ahnung, welchen Inhalt es basierend darauf zeigen soll.)

    – CBroe

    21. Oktober 2021 um 14:38 Uhr

  • Ich denke, Sie könnten mehr Glück haben, wenn Sie dies mit einrichten developer.wordpress.org/reference/functions/add_rewrite_rule

    – CBroe

    21. Oktober 2021 um 14:46 Uhr

  • Das WP-Framework funktioniert nicht mit internen Rewrite-Regeln in .htaccess. Sie müssen die WP-Rewrite-API in Ihrer Theme-PHP-Datei verwenden.

    – anubhava

    21. Oktober 2021 um 14:55 Uhr

  • @CBroe Ich habe diese WP-Funktion verwendet add_rewrite_rule vorher, aber ich bemerkte, was es schließlich tut, ist, dass es das umschreibt .htaccess Datei 🙂 Auch diese Funktion add_rewrite_rule scheint die gleiche Einschränkung zu haben: Die Ersatzzeichenfolge muss ein Dateipfad sein (z anything.php?query=foo) und keine andere URL. Die Frage ist: Wie hat WP Zugriff auf die ursprünglich angeforderte URL?

    – Basj

    21. Oktober 2021 um 16:56 Uhr


  • “Wie hat WP Zugriff auf die ursprünglich angeforderte URL?” – Vermutlich durch das PHP-Superglobal $_SERVER['REQUEST_URI']. “Ich habe es mit dem RewriteRule-Flag versucht [PT] was funktionieren sollte” – Das gilt nur, wenn es in a verwendet wird Server Kontext. Im .htaccess PT ist im Wesentlichen das Standardverhalten. Übrigens im .htaccesswird die subs-Zeichenfolge als URL-Pfad angesehen, nicht als Dateipfad (insbesondere da RewriteBase ist definiert)..

    – Herr weiß

    21. Oktober 2021 um 18:07 Uhr


Nach einigen Recherchen scheint dies nicht möglich zu sein.

Entweder ist es eine RewriteRule mit [R] Umleitungs-Flag, und dann wird der Browser eine neue Anfrage stellen, dann kann in diesem Fall das Ziel/die Ersetzung jede neue URL sein …

… oder es ist nicht eine Umleitungs-RewriteRule und dann muss das Ziel/die Ersetzung eine Datei sein, die die Anfrage bedient.

Siehe auch So verwenden Sie RewriteRule, sodass $_SERVER[‘REQUEST_URI’] ist auch für PHP modifiziert?


In einem WordPress-Kontext ist das ein (funktionierender) Hack nicht Verwenden Sie eine .htaccess RewriteRule, aber tun Sie dies stattdessen in functions.php:

$_SERVER['REQUEST_URI'] = preg_replace(..., ..., $_SERVER['REQUEST_URI'])

997550cookie-checkRewriteRule, wenn die Substitutionszeichenfolge kein Dateipfad, sondern eine URL ist, die von den nächsten Regeln verarbeitet werden soll

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy