HARD FUSH_REWRITE_RULES()不重新生成.htaccess

时间:2017-03-17 作者:cruzquer

我目前正在开发一个主题,我想添加两个永久链接
一个正在重定向到索引。php带有一些自定义参数和值(存储在wp\\u options表中的规则),另一个是重定向到我的模板中的一个文件,该文件提供了管理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文件中是否有任何更改的最佳方法)。

The Problem:
即使flush_rewrite_rules() 重置硬刷新默认情况下,我将参数设置为true以确保。我的第一条重写规则表现得很好,而。在访问选项permalink之前,不会重新生成htaccess文件。后端的php页面(在这里也调用了flush函数并可以工作?!)。

我已经试过了flush_rewrite_rules() 参考文件中建议的其他挂钩上。

提前感谢您的帮助!

Edit:
即使将代码更改为以下代码,其行为也与此相同…

global $wp_rewrite;
$wp_rewrite->add_rule( \'^(activate|reset)/([0-9]*)sfa([A-Za-z0-9]*)/?$\', \'index.php?sfa_user=$matches[2]&sfa_password_reset=$matches[3]\', \'top\' );
$wp_rewrite->add_external_rule( \'ajax-api/?$\', str_replace( ABSPATH, \'\', dirname( dirname( __FILE__ ) ) . \'/api/ajax-api.php\' ) );
$wp_rewrite->flush_rules( true );

3 个回复
最合适的回答,由SO网友:cruzquer 整理而成

最后我找到了解决方案…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.phpadmin_init 行动挂钩。

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

SO网友:rudtek

尝试将此用于重写:

global $wp_rewrite;
$wp_rewrite->flush_rules( true );
看看这是否有效。

SO网友:Mark Kaplun

似乎您将内部重写规则(本应称为“解析规则”)与htaccess重写规则混淆了。它们是不一样的,一般来说,它们的功能也不一样。

第一个规则是解析规则,第二个规则是重写规则

根本不应该这样做。由于以下几个原因,直接访问php文件是不可能的,即使您以某种方式屏蔽了它。

您需要htaccess生成钩子,正如您正确观察到的那样,它只会在permalink页面上触发,否则您必须在代码中触发生成。由于第1点,这是个坏主意。而且它在多站点中也不起作用,我觉得懒惰和不挖掘函数调用和挂钩的名称是有道理的;)

相关推荐

如何在我的根域上组合WordPress htaccess+在子文件夹上组合php

我为一个看似重复的问题道歉,但我所看到的几十个问题中,没有一个是同样的问题。我有以下目录结构:/.htaccess /index.php /subfolder/.htaccess /subfolder/index.php 我希望所有页面请求都由/index.php, 除非请求启动/subfolder 在这种情况下,应由/subfolder/index.php.e、 g。/abc 将重写为/subfolder/abce、 g。/subfolder/def 将重写为/subf