通过 AJAX 访问 php 文件返回 403 Forbidden

Posted

技术标签:

【中文标题】通过 AJAX 访问 php 文件返回 403 Forbidden【英文标题】:Access php file via AJAX returns 403 Forbidden 【发布时间】:2020-05-11 00:41:12 【问题描述】:

创建了一个应该通过 AJAX 访问此文件的插件:

https://example.com/wp-content/plugins/stemon-mailchimp-form/assets/sm_mailchimp.php

但是它返回 403 Forbidden。

尝试将此添加到.htaccess,但尚未成功。

<Files ~ "\wp-content\plugins\stemon-mailchimp-form\.php$">
  Order allow,deny
  Allow from all
</Files>

有什么建议吗?

【问题讨论】:

您首先需要弄清楚为什么会出现 403,然后再尝试解决方法此问题(正如您似乎正在做的那样)。 (顺便说一句,&lt;Files&gt; 指令仅匹配文件名,而不匹配文件路径。) 感谢MrWhite,您如何建议我找出403 发生的原因?谢谢 而且,假设我需要在.htaccess 中编写允许规则,我应该像这样&lt;Files ~ "sm_mailchimp.php"&gt; 吗? "弄清楚为什么是 403" - 也许是由 .htaccess 中的其他指令引起的?请将您的.htaccess 文件的内容添加到您的问题中。 正确。在插件目录中创建了一个.htaccess,它起作用了!非常感谢你的帮助。已经对此失去希望了:) 【参考方案1】:

在插件子目录中创建一个 .htaccess 文件,其中包含从 mod_auth... 到 allow 的特定指令,访问该文件应该覆盖父 .htaccess 文件中的任何阻塞指令树。

例如:

<Files "sm_mailchimp.php">
Order allow,deny
Allow from all
</Files>

请注意,OrderAllow 指令是 Apache 2.2 指令(它们仍然适用于 Apache 2.4,但已弃用)。如果您使用的是 Apache 2.4,那么应该使用 Require all granted 而不是上述两个指令。

&lt;Files&gt; 容器仅与文件名匹配。此处不应指定文件路径。另请注意,这不是正则表达式匹配(尽管允许使用某些通配符)。正是 &lt;Files ~ "filename"&gt; 中的 ~ 使其成为正则表达式匹配。

请注意,如果这有效,那么它覆盖其他地方的阻塞指令(可能在父目录中的.htaccess 文件中)。也许可以在同一个地方覆盖它,而无需创建另一个 .htaccess 文件。

【讨论】:

以上是关于通过 AJAX 访问 php 文件返回 403 Forbidden的主要内容,如果未能解决你的问题,请参考以下文章

plupload 运行时在尝试访问 upload.php 时返回 403 FORBIDDEN 错误

admin-ajax.php?action=woocommerce_feature_product 403 错误

Django jquery ajax 返回403

如何使用 PHP 处理 403 错误

Drupal 中的 Ajax 请求给出 403

通过ajax发送数据时Codeigniter 403禁止错误