web-dev-qa-db-fra.com

add_rewrite_rule: $ correspond var non remplacée par valeur capturée

Je souhaite accéder à un fichier de plug-in (lorsque vous cliquez sur <a>) sans exposer le chemin d'accès réel du fichier. J'utilise la règle de réécriture suivante:

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

La demande est redirigée vers continue.php mais je reçois toujours $_GET['where']=$matches[1] au lieu de $_GET['where']=123 dans continue.php. Il aurait dû être remplacé par un certain nombre.

Je veux quelque chose de similaire à this

Mise à jour

J'ai essayé Monkeyman Rewrite Analyzer mais ma règle n'y apparaît pas. Alors pourquoi suis-je redirigé vers la bonne page?

par exemple. pour continue/2 il a la sortie suivante:

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

5
a_fan

Cette règle de réécriture ne fonctionnera pas du tout, qu'elle soit vidée ou non.

Il existe deux types de règles de réécriture dans WordPress. Ceux qui ont leurs URL de réécriture commencent par index.php et ceux qui ne les ont pas.

Toutes les règles WordPress internal rewrite doivent commencer par index.php. Il ne peut pas être redirigé ailleurs, car déjà a été redirigé vers le fichier index.php au moment où les fonctions WordPress traitent le jeu de règles. Ainsi, les règles non-index.php doivent aller directement dans le fichier .htaccess, afin de pouvoir être redirigées vers un autre emplacement que index.php.

  • Ceux qui commencent par index.php seront traités dans WordPress même, et la syntaxe $ matches [1] sera la bonne à utiliser dans ce cas.

  • Ceux qui ne commencent pas par index.php seront plutôt écrits dans le fichier .htaccess en tant que RewriteRules direct. La syntaxe $ matches [1] n’a aucun sens dans ce cas.

Si vous regardez dans votre fichier .htaccess après avoir utilisé votre règle, vous trouverez ceci:

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

Ce qui ne fonctionnera évidemment pas.

Au lieu de cela, essayez de transformer votre code en ceci:

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

Notez le remplacement de 1 $ à la place? Cela fonctionnera correctement une fois converti en un RewriteRule normal.

13
Otto