Внешнее/не относящееся к WP правило перезаписи без QSA


Я пытаюсь добавить новое внешнее/не относящееся к WP правило перезаписи в свой .htaccess, но WP продолжает добавлять [QSA,L] в конец правила. Как мне предотвратить часть QSA?

В этой строке добавляется рерайтер:

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

И это результирующая строка в моем .htaccess

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

Чего бы я хотел, так это:

RewriteRule ^go/([0-9]+)/?.*$ /wp-content/plugins/xswpc/redirect.php?id=$1 [L]
Author: BlueEel, 2013-07-23

2 answers

Флаги перезаписи apache, такие как QSA жестко закодированы, см. источник. Не знаю, почему это вас беспокоит, но если вы действительно хотите это изменить, то вы можете и должны использовать mod_rewrite_rules крючок для этого. Ниже приведен пример того, как это сделать:

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;
}

Будьте осторожны, я не проверял регулярное выражение.

 3
Author: Nicolai, 2014-06-17 22:03:48

Может быть, вы можете попробовать с помощью 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
Author: Jonathan Lafleur, 2014-06-17 19:52:10