首先,我尝试了其他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运行。
关于为什么这次重写不公平的任何指示都将非常感激。
由于
答案 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');
我尝试了很多这方面的变化,但这个最终奏效了。谢谢你的帮助。