web-dev-qa-db-fra.com

Règle de réécriture externe/non-WP sans QSA

J'essaie d'ajouter une nouvelle règle de réécriture externe/non-WP à mon .htaccess mais WP continue à ajouter [QSA,L] à la fin de la règle. Comment puis-je empêcher la pièce QSA?

Cette ligne ajoute le RewriteRule:

$wp_rewrite->add_external_rule('go/([0-9]+)/?.*$', 'wp-content/plugins/xswpc/redirect.php?id=$1');

Et ceci est la ligne résultante dans mon .htaccess

RewriteRule ^go/([0-9]+)/?.*$ /wp-content/plugins/xswpc/redirect.php?id=$1 [QSA,L]

Ce que j'aimerais, c'est:

RewriteRule ^go/([0-9]+)/?.*$ /wp-content/plugins/xswpc/redirect.php?id=$1 [L]
2
BlueEel

Les drapeaux de réécriture Apache comme QSA sont codés en dur, voir source . Vous ne savez pas pourquoi cela vous dérangerait, mais si vous voulez vraiment le changer, vous pouvez et devez utiliser le crochet mod_rewrite_rules pour cela. Ci-dessous un exemple sur la façon de le faire:

add_filter( 'mod_rewrite_rules', 'wpse107528_change_mod_rewrite_rules' );
function wpse107528_change_mod_rewrite_rules( $rules ) {
    $pattern = '/^(?<=RewriteRule\s\^go.+\$1\s)(\[QSA,L\])$/im';
    $replacement = '[L]';
    $rules = preg_replace( $pattern, $replacement, $rules );
    return $rules;
}

Attention, je n'ai pas testé le Regex.

3
Nicolai

Peut-être que vous pouvez essayer avec add_rewrite_rule

function wpse107528_add_external_rewrite_rule()
{
    add_rewrite_rule(
        'go/([0-9]+)/?.*$',
        'wp-content/plugins/xswpc/redirect.php?id=$1',
        'top'
    );
    //Uncomment when testing to avoid already refresh permalink page in wp-admin
    //flush_rewrite_rules();
}
add_action( 'init', 'wpse107528_add_external_rewrite_rule' );
0
Jonathan Lafleur