hard flush_rewrite_rules()没有重新生成.htaccess

时间:2017-03-17 09:40:32

标签: wordpress .htaccess redirect mod-rewrite wordpress-theming

我目前正在开发一个主题,我想添加两个永久链接 一个是使用一些自定义参数和值(存储在wp_options表中的规则)重定向到index.php,另一个是重定向到我的模板中的文件,该文件提供admin-ajax.php功能(存储在.htaccess文件中的规则)

add_action( 'init', 'custom_rewrite_rules' );
function custom_rewrite_rules() {
    add_rewrite_rule( 
        '^(activate|reset)/([0-9]*)sfa([A-Za-z0-9]*)/?$',
        'index.php?sfa_user=$matches[2]&sfa_password_reset=$matches[3]',
        'top'
    );

    add_rewrite_rule(
        'ajax-api/?$',
        str_replace( ABSPATH, '', dirname( dirname( __FILE__ ) ) . '/api/ajax-api.php' )
    );

    flush_rewrite_rules( true );
} );

当我处于开发模式时,我正在通过执行'init'挂钩来刷新规则
我知道这是不好的做法,但这似乎是我检查的最佳方法如果.htaccess文件中有任何更改。)。

问题:
即使flush_rewrite_rules()默认重置硬刷新,我也将参数设置为true以确保。我的第一个重写规则是非常好的,而.htaccess文件在我访问后端的options-permalink.php页面之前没有重新生成(其中flush函数也被调用并且可以工作?!)。

我已尝试在参考文献中提出的另一个钩子上执行flush_rewrite_rules()

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

最后我找到了解决方案...... save_mod_rewrite_rules()是生成和添加重写规则的函数。在Doc中它说:

/* If the function named 'save_mod_rewrite_rules' exists, it will be called. */

此函数是由wp-admin/includes/misc.php加载的wp-admin/includes/admin.php的一部分,它在admin_init操作挂钩之前加载。

然而,你永远不应该在任何init动作钩子上刷新重写规则:Flush Rewrite Examples