it-swarm.com.de

add_rewrite_rule: $ matches var werden nicht durch den erfassten Wert ersetzt

Ich möchte auf eine Plugin-Datei zugreifen (wenn auf <a> geklickt wird), ohne den tatsächlichen Pfad der Datei preiszugeben. Ich verwende die folgende Umschreiberegel:

add_rewrite_rule( 'continue/([0-9]+)/?$', 'wp-content/plugins/my-plugin/continue.php?where=$matches[1]', 'top' );

Die Anfrage wird an continue.php weitergeleitet, aber ich erhalte immer $_GET['where']=$matches[1] anstelle von $_GET['where']=123 in continue.php. Es sollte durch eine Nummer ersetzt worden sein.

Ich möchte etwas Ähnliches wie das

Update

Ich habe versucht, Monkeyman Rewrite Analyzer aber meine Regel wird darin nicht angezeigt. Warum werde ich dann auf die richtige Seite umgeleitet?

z.B. Für continue/2 hat es die folgende Ausgabe:

(.+?)(/[0-9]+)?/?$ pagename: continue page: /2

5
a_fan

Diese Regel zum Umschreiben funktioniert überhaupt nicht, ob gelöscht oder nicht.

Es gibt zwei Arten von Umschreiberegeln in WordPress. Diejenigen, die ihre Rewrite-URLs haben, beginnen mit index.php und diejenigen, die dies nicht tun.

Alle WordPress internen Rewrite-Regeln müssen mit index.php beginnen. Es kann nicht an einen anderen Ort umgeleitet werden, da es bereits zur Zeit, in der die WordPress-Funktionen den Regelsatz verarbeiten, in die Datei index.php umgeleitet wurde. Nicht-index.php-Regeln müssen daher direkt in die .htaccess-Datei eingefügt werden, damit sie an einen anderen Ort als index.php umgeleitet werden können.

  • Diejenigen, die mit index.php beginnen, werden in WordPress selbst verarbeitet, und die Syntax $ matches [1] ist in diesem Fall die richtige.

  • Diejenigen, die nicht mit index.php beginnen, werden stattdessen als direkte RewriteRules in die .htaccess-Datei geschrieben. Die Syntax $ matches [1] macht in diesem Fall keinen Sinn.

Wenn Sie in Ihrer .htaccess-Datei nach der Verwendung Ihrer Regel suchen, finden Sie Folgendes:

RewriteRule continue/([0-9]+)/?$ wp-content/plugins/my-plugin/continue.php?where=$matches[1]

Was natürlich nicht funktioniert.

Versuchen Sie stattdessen, Ihren Code so zu gestalten:

add_rewrite_rule( 'continue/([0-9]+)/?$', 'wp-content/plugins/my-plugin/continue.php?where=$1');

Beachten Sie stattdessen den Ersatz von 1 USD? Dies funktioniert ordnungsgemäß, wenn es in eine normale RewriteRule konvertiert wird.

13
Otto