Wordpress添加重写规则以指向插件文件


Wordpress add rewrite rule to point to plugin file

首先,我尝试了其他stackerflow用户的几种不同建议,但我运气不佳。

我正在尝试从插件内部构建一种api。任务是让外部系统调用我的插件中的URL,以便启动内部过程。

目前我有一个班有一个辅导员。这在构造函数内部。

add_action( 'init', 'my_rewrite' );
function my_rewrite() {
  global $wp_rewrite;
  $plugin_url = plugins_url( 'my-api.php', __FILE__ );
  $plugin_url = substr( $plugin_url, strlen( home_url() ) + 1 );
  add_rewrite_rule('/my-api/(.*)', $plugin_url ,'top');
  $wp_rewrite->flush_rules(true);
}

然后在我的htaccess文件中生成一个RewriteRule。

RewriteRule ^/my-api/(.*) /wp-content/plugins/my-api/classes/my-api.php [QSA,L]

以下是上下文的完整.htaccess文件

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index'.php$ - [L]
RewriteRule ^/slurp-api/(.*) /wp-content/plugins/slurp/classes/my-api.php [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

无论出于什么原因,当我访问site.dev/my-pi时,我看到的是404页面,而不是应该从my-api.php 运行的echo语句

如果有任何帮助的话,开发站点正在通过mamp-pro运行。

任何关于为什么重写不公平的建议都将不胜感激。

感谢

从原始请求中删除前导正斜杠

RewriteRule ^my-api/(.*) /wp-content/plugins/my-api/classes/my-api.php [QSA,L]

并确保文件my-api.php存在于您在重写目标中给出的位置:

/wp-content/plugins/my-api/classes/my-api.php 

以免故意给它一个不存在的目标。

正如@Starkeen在评论中提到的,你也可以从目标上删除前导斜杠,就像这个一样

RewriteRule ^my-api/(.*) wp-content/plugins/my-api/classes/my-api.php [QSA,L]

所以,经过多次修改,我找到了正确的答案。我把这条线路改成

add_rewrite_rule('my-api', $plugin_url ,'top');

我尝试了很多变体,但这一个最终成功了。谢谢你的帮助。