【问题标题】:hard flush_rewrite_rules() not regenerating .htaccess硬flush_rewrite_rules()不重新生成.htaccess
【发布时间】:2017-04-08 01:13:54
【问题描述】:

我目前正在开发一个主题,我想在其中添加两个永久链接。
一种是使用一些自定义参数和值(规则存储在 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-function 并且可以工作?!)。

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

提前感谢您的帮助!

【问题讨论】:

  • 你永远不应该将flush_rewrite_rules 挂在init 上。如果是硬同花,那就更糟了……
  • 哇哦——谢谢@yivi 的无谓评论。正如我已经指出的那样,我在 init 上挂钩了该函数以进行测试。正如我也指出的那样,我知道您应该将其与其他操作挂钩……但是这对冲洗过程本身应该没有影响,对吧?如果您真的想提供帮助,请帮自己一个忙,阅读整篇文章。

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


【解决方案1】:

终于找到了解决办法…… save_mod_rewrite_rules() 是生成和添加重写规则的函数。在文档中它说:

/* 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 动作钩子之前加载。

尽管如此,您不应该在任何初始化操作挂钩处刷新重写规则:Flush Rewrite Examples

【讨论】:

    猜你喜欢
    • 2016-08-09
    • 1970-01-01
    • 2019-10-22
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 2012-05-09
    • 2011-07-01
    相关资源
    最近更新 更多