如何配置 Apache 让 PHP 处理 OPTIONS HTTP 请求? [关闭]
Posted
技术标签:
【中文标题】如何配置 Apache 让 PHP 处理 OPTIONS HTTP 请求? [关闭]【英文标题】:How to configure Apache to let PHP handle OPTIONS HTTP requests? [closed] 【发布时间】:2012-11-14 21:20:48 【问题描述】:为了为 CORS(跨域请求)设置适当的测试套件,我需要能够直接从脚本处理 HTTP OPTIONS 方法。因此,我有一个简单的 php 脚本来检测 OPTIONS 方法,并通过输出一些特定的标头做出相应的反应。
PHP 端不是问题。如果我使用 curl 发出 GET/POST/HEAD/PUT/等。请求他们都去脚本,它显然可以很好地处理它们。但是,如果我发出 OPTIONS 请求,它永远不会到达脚本:Apache 会立即回复并列出它认为适合该资源的一组方法。我可以看出脚本没有运行(没有日志记录,它的输出都没有响应,等等)。
我一直在检查 Apache 配置,确保没有适用的 .htaccess 阻碍,我已经调整了很多东西,例如 Limit/LimitExcept 指令,但我无法让它改变它行为。我还尝试从我年轻时找到一种可能对这里有所帮助的技术的信息:NPH(非解析的标头)脚本;但显然现在已经消失了(至少,我找不到任何关于它的最新信息)。
所以问题是:如何调整 Apache 的配置,以便让我的脚本处理 OPTIONS?
【问题讨论】:
这应该可以工作 - 只要你没有限制或没有为 OPTIONS 启用特定的处理程序。但是 a) 我们需要查看您的 .conf 文件,其次这属于服务器故障。建议将其迁移,但同时添加 .conf 文件。 我会包含 .conf,但它是一个庞大的配置,需要做很多事情(测试需要很多配置差异)。我的下一步是将其一分为二,直到它起作用,但我希望在我必须这样做之前获得线索,因为这不是一项小任务。 【参考方案1】:我刚刚测试了我自己的 PHP(5.3,Apache 2.2),它仍然可以工作(因为它已经有一段时间了)。 OPTIONS 被发送出去,并出现在你所期望的 $_SERVER 数组中
目标应该是将设置恢复为默认设置(应该可以),然后使用您需要的其他选项构建您的 conf。
否则,如果没有看到 .conf 文件,我们就会盲目 - 所以这里有一些东西需要寻找。
-
限制指令。你说你在那里检查过,但只是为了调试,删除所有引用。在虚拟主机中包含任何内容,并且可以单独更改目录。
LimitExcept 也是如此(您说您尝试过 - 只需将它们全部删除)
检查 .conf 和 .htaccess 是否有任何重定向或基于
RequestHeader
或 REQUESTHEADER
的其他条件(进行搜索和分析)
[我刚刚还阅读了一些关于检查THE_REQUEST
的内容,但之前从未听说过。也值得检查?]
最后,检查您没有为 OPTIONS 指定特定的处理程序,即Script OPTIONS /cgi-bin/optionshandler
,并且您的 PHP 处理程序同样被指定为仅处理 GET 和 POST。再次记住虚拟主机和目录以及 .htaccess 可以单独更改,因此请全部检查。
这就是我能想到的。否则,正如我建议的那样,从头开始(它有效)并构建其他所有内容,直到它不起作用为止。
【讨论】:
一篇古老的帖子,但它是我在研究最近的一个问题时发现的信息量最大的帖子。最后,我的问题是我运行的是 libapache2-mod-php5filter,而不是 mod-php5。 (不知道为什么,我很久以前就安装了)。 php5filter 不会将 OPTIONS 传递给 PHP。切换到 mod-php5 为我解决了这个问题。以上是关于如何配置 Apache 让 PHP 处理 OPTIONS HTTP 请求? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
小白搭建WAMP详细教程---apachemysqlphp的整合配置