Внешнее/не относящееся к 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]
2
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