【问题标题】:Wordpress add rewrite rule to point to plugin fileWordpress 添加重写规则以指向插件文件
【发布时间】:2016-03-13 09:29:35
【问题描述】:

首先,我尝试了其他 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 运行。

任何关于为什么这种重写不公平的指针将不胜感激。

谢谢

【问题讨论】:

  • 如果您在 htaccess 上下文中使用这些规则,那么..尝试从所有规则中删除前导斜杠,RewriteRule / myapi

标签: php wordpress .htaccess mod-rewrite


【解决方案1】:

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

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 在 cmets 中提到的那样,您也可以从目标中删除前导斜杠,就像这样

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

【讨论】:

  • 感谢您的帮助。我已经删除了前导斜杠,该行现在看起来像这样。重写规则 ^my-api/(.*) wp-content/plugins/my-api/classes/my-api.php [QSA,L]。有趣的是,我可以通过访问 site.dev/wp-content/plugins/my-api/classes/my-api.php 浏览到 api 文件,这非常有效。
  • 抱歉,我还没写完评论就回车了。不,更改没有奏效。谢谢
  • 转到这个网址,http://site.dev/my-api/something-nice 并检查它是否正常工作
  • 理想情况下,我希望 Wordpress 处理规则创建,因为它是一个插件,我真的没有/不应该访问 htaccess 文件。
  • 那个 URL 不起作用。我已经尝试了所有我能想到的。
【解决方案2】:

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

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

我对此尝试了许多变体,但这个最终奏效了。感谢您的帮助。

【讨论】:

    猜你喜欢
    • 2012-10-01
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    相关资源
    最近更新 更多