不带QSA的外部/非WP重写规则

时间:2013-07-23 作者:BlueEel

我正在尝试将新的外部/非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 个回复
最合适的回答,由SO网友:Nicolai Grossherr 整理而成

apache重写标志如下QSA 硬编码,请参阅source. 不知道为什么它会困扰你,但如果你真的想改变它,那么你可以而且应该使用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;
}
小心,我还没有测试正则表达式。

SO网友:Jonathan Lafleur

也许你可以试试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\' );

结束

相关推荐

WordPress.htaccess将博客视为目录

我将一个旧的(静态)网站重新设计为WordPress CMS。现在,该网站基于WordPress,以“博客”作为显示所有帖子的页面。在以前的(静态)版本中,他们已经在/blog目录中有一个单独的WP blog。我将所有旧的博客帖子导入到新的WP设置中,但问题是图像。在旧博客上,帖子中的图片有如下来源http://www.example.com/blog/wp-content/uploads/../x.jpg 但一旦所有帖子都导入到新站点,这些图片路径在导入的帖子中并没有改变,现在都是断开的链接。我试图通过