选择性 302 重定向

Selective 302 redirect

我正在从一个域 (mac2cash.com) 上的 php 脚本调用 cURL 到另一个域 (thebookyard.com),两者都托管在相同的 Apache 服务器和相同的 IP 地址上。这一直运行良好,但我需要向站点添加一些新功能,并且我刚刚在与正在运行的 cURL 调用相同的目标域的根级别创建了一个新的 php 脚本,但是当我调用这个新脚本使用我在工作脚本中使用的相同代码,返回消息 "Found: the document has moved here"。

有效和失败的 cURL 调用的目标脚本位于同一域的根级别。我检查过它们具有相同的 unix 权限。但是,如果我只是将工作脚本中的 php 文件名更改为失败调用中的目标脚本的名称,那么这现在也会失败,并显示相同的 302 重定向消息。 我什至将目标域上的 'working' 目标脚本 (byasd_api.php) 复制到一个新文件 (byasd_api_copy.php),如果我从调用方对该文件进行 cURL 调用,我会收到 302 消息即使代码完全相同,脚本也能正常工作! 我看不出这两个文件之间有什么区别。是否有某种缓存在新创建的文件未被相同对待的情况下进行?

供参考,调用代码如下:

    $header=array("Host:thebookyard.com"); 
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, HTTP_SERVER_IP."/byasd_api.php");
    curl_setopt($ch, CURLOPT_HEADER, false); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_REFERER, 'http://www.mac2cash.com');
    curl_setopt($ch, CURLOPT_POST,3);
    curl_setopt($ch, CURLOPT_POSTFIELDS,$post_data);            
    $output = curl_exec($ch);
    curl_close($ch);

'byasd_api.php' 脚本名称是我唯一要更改的内容。

我花了几个小时在谷歌上搜索解决方案,因此非常感谢任何建议。

您的 apache 已配置为在每次调用时搜索 favicon.ico 302 是因为找不到 ico

GET http://theboo....com/favicon.ico [HTTP/1.1 302 发现 151ms]

更改配置或添加 favicon.ico 文件。

也许配置试图只在根目录中找到 ico 文件

事实证明,行为差异的原因是工作脚本名称作为重写条件包含在将 http 重定向到 https 的 htaccess 文件中。将 CURL url 更改为 "https://".HTTP_SERVER_IP."/byasd_api.php" 停止了 "Found: the document has moved here" 错误,但随后调用失败,因为 CURL 试图验证IP 地址而非域的 SSL 证书。 解决方案是添加以下内容: curl_setopt($ch, CURLOPT_RESOLVE, 数组("www.thebookyard.com:443:".HTTP_SERVER_IP,)); 这仍然允许调用到 IP 地址(这比通过域名快得多)但是 CURL 会根据域名验证 SSL 证书。