【问题标题】:How Do I Stop Rewrite Rules in .htaccess from Being Removed by Wordpress?如何阻止 .htaccess 中的重写规则被 Wordpress 删除?
【发布时间】:2023-01-12 07:05:54
【问题描述】:

我正在开发一个插件,它将特定的 URL 模式重写到插件中的目录。为了添加这些规则,我在调用 flush_rewrite_rules() 之前在插件激活函数中调用了 add_rewrite_rule()。这在创建重写规则方面做得很好,但有时它们会以某种方式被删除。

在一种情况下,我更改了帖子的永久链接结构。 Wordpress 似乎在没有我的规则的情况下重新生成了 .htaccess 文件。要重新生成规则,我必须停用并重新激活插件。这让我感到惊讶,因为我的印象是调用 flush_rewrite_rules() 在添加新规则和重新生成 .htaccess 文件之前清点现有规则。我系统中的某些东西似乎在没有先清点现有规则的情况下重新生成文件。

在另一种情况下,我添加了一些插件,我认为其中一个在激活时重新生成了 .htaccess 文件。

有什么方法可以阻止 Wordpress 和其他插件从 .htaccess 文件中删除我的规则吗?

如果有某种方法可以标记规则,以便 Wordpress 将来无法删除它们,那就太好了。就像你可以添加一个特殊字符或告诉 Wordpress 永远不要出于任何原因删除该特定规则的东西,而不是从创建它的插件中删除它的指令。

我不能接受的是通过文件权限使 .htaccess 文件不可写,因为它必须是可写的,以便 Wordpress 首先创建规则。我也相信我不能在 init 上添加规则,因为这是一个插件而不是主题。这是我的第一个使用重写规则的插件,所以我对此可能是错误的,但根据我目前的研究,你应该在激活时而不是初始化时从插件添加重写规则。

【问题讨论】:

    标签: wordpress apache .htaccess mod-rewrite


    【解决方案1】:

    使用“save_mod_rewrite_rules”过滤器在保存之前修改 .htaccess 规则。您可以使用此过滤器在 .htaccess 文件保存之前将插件的重写规则包括在内。

     function my_mod_rewrite_rules( $rules ) {
        // Get your plugin's rewrite rules
        $my_rules = my_get_rewrite_rules();
    
        // Add your plugin's rewrite rules to the beginning of the $rules string
        $rules = $my_rules . $rules;
    
        return $rules;
    }
    
    
    add_filter( 'mod_rewrite_rules', 'my_mod_rewrite_rules' );
    

    您可以在插件的激活函数中使用此过滤器,以在插件激活时将插件的重写规则添加到 .htaccess 文件中。

    祝你好运 !

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-22
      • 1970-01-01
      • 2014-02-04
      • 2014-04-30
      相关资源
      最近更新 更多