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

时间:2015-12-08 12:45:21

标签: php wordpress .htaccess mod-rewrite

首先,我尝试了其他stackoverflow用户的几个不同的建议,但我没有运气。

我正在尝试从插件中构建一种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-api时,我看到一个404页面而不是应该从my-api.php运行的echo语句

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

关于为什么这次重写不公平的任何指示都将非常感激。

由于

2 个答案:

答案 0 :(得分:0)

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

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]

答案 1 :(得分:0)

所以,经过多次修修补补后,我找到了正确的答案。 我将此行更改为

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

我尝试了很多这方面的变化,但这个最终奏效了。谢谢你的帮助。