web-dev-qa-db-fra.com

RewriteRule accepte les chiffres mais pas les lettres dans la balise

RewriteRule ne fonctionne qu'avec des nombres

J'essaie actuellement d'obtenir le lien

example.com/subdir/StackExchange/

agir comme un lien avec par exemple une balise de site supplémentaire:

example.com/subdir?website=StackExchange


J'ai mis en place une RewriteRule dans le .htaccess qui ressemble à ceci:

RewriteRule ^subdir/(.*)/$ subdir.php?website=$1 [L]

Lorsque j'utilise des nombres (example.com/subdir/123/), echo $_GET["website"] renvoie avec succès "123". Dès que j'utilise des lettres alphabétiques (example.com/subdir/abc/), cela ne fonctionne pas .

Comment puis-je changer cela? Est-ce un problème avec WordPress? J'ai défini l'option "permalink" dans le tableau de bord des paramètres WordPress sur "Post name". J'ai aussi essayé d'autres méthodes, mais rien n'a changé.

1
H. Grimm

Laissez .htaccess seul. Vous pouvez utiliser WordPress pour réécrire l'API .

add_action( 'init', function(){
    return add_rewrite_rule(
        'subdir/([^/]+)/?$', // ([^/]+) takes alphanumeric, while ([0-9]+) accepts digits
        'index.php?pagename=subdir&website=$matches[1]',
        'top'
    );
});

add_filter('query_vars', function($v){ return array_merge(array('website'),$v); });

Tout d’abord, assurez-vous que subdir est un slug de page valide, dans cet exemple. Après avoir enregistré ce code dans le fichier de fonctions ou le plug-in de votre thème enfant, vous pouvez désormais utiliser get_query_var('website') pour obtenir la propriété website plutôt que d'utiliser $_GET global.

J'espère que cela pourra aider.

1
Samuel Elh