【问题标题】:Wordpress add rewrite rules and conditions in plugin developmentWordpress在插件开发中添加重写规则和条件
【发布时间】:2020-03-31 04:19:25
【问题描述】:

我想在 wordpress htacess 中添加以下额外规则和条件

RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]

所以在我的插件代码中我已经添加了

function write_authorization_conditions(){
  global $wp_rewrite;

  $wp_rewrite->add_rewrite_tag("RewriteCond","%{HTTP:Authorization} ^(.*)",null); //this fails
  $wp_rewrite->add_rule("(.*) - [E=HTTP_AUTHORIZATION:%1]",null);

  $wp_rewrite->wp_rewrite_rules();
  $wp_rewrite->flush_rules();

  flush_rewrite_rules();
}

add_action('admin_init','write_authorization_conditions');

以上只写RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1],不包括RewriteCond %{HTTP:Authorization} ^(.*)

我试过了

 $wp_rewrite->add_external_rule("RewriteCond %{HTTP:Authorization} ^(.*)",null);

但这只会增加

RewriteRule ^RewriteCond %{HTTP:Authorization} ^(.*) / [QSA,L]

我如何使这项工作。最后我希望 .htaccess 文件有

# BEGIN WordPress
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteRule ^index\.php$ - [L]

  RewriteCond %{HTTP:Authorization} ^(.*) //extra addition
  RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1] //extra addition

  //others here
</IfModule>
# END WordPress

【问题讨论】:

  • 您可以使用过滤器mod_rewrite_rules自定义规则
  • 你有一个例子说明如何使用 mod_rewrite_rules 实现这一目标

标签: wordpress .htaccess mod-rewrite


【解决方案1】:

查看WP_Rewrite类,目前没有办法按需要写RewriteCond规则。

实现您想要的一个技巧是使用mod_rewrite_rules 过滤器。您的 RewriteRule 已写入 admin_init 操作。然后在过滤器中,您需要检查此 RewriteRule 是否存在,然后使用 str_replace 前置 RewriteCond 行。下面是代码:

function write_authorization_conditions(){
  global $wp_rewrite;

  //$wp_rewrite->add_rewrite_tag("RewriteCond","%{HTTP:Authorization} ^(.*)",null); //this fails
  $wp_rewrite->add_rule("(.*) - [E=HTTP_AUTHORIZATION:%1]",null);

  $wp_rewrite->wp_rewrite_rules();
  $wp_rewrite->flush_rules();

  flush_rewrite_rules();
}

add_action('admin_init','write_authorization_conditions');

function rewrite_auth_conditions( $rules ){

   //Check if our RewriteRule is present
   $needle = 'RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]';
   $replace = 'RewriteCond %{HTTP:Authorization} ^(.*)';

   if( strpos( $rules, $needle) !== false ) { 
      $rules = str_replace($needle, $replace . "\n". $needle, $rules);      
   }
   return $rules;
}
add_filter('mod_rewrite_rules', 'rewrite_auth_conditions');

【讨论】:

    猜你喜欢
    • 2016-03-13
    • 2012-10-01
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 2014-03-26
    • 2012-01-18
    相关资源
    最近更新 更多