我正在尝试从Ubuntu Server 11.10运行我的php应用程序。这个应用程序在Windows下的Apache + PHP下工作正常。我有其他应用程序,我可以简单地复制和粘贴在2操作系统之间,它们可以同时工作。
然而,这个使用php库tonic(RESTful webservices)并使我们成为php cURL模块。问题是我没有收到错误消息,因此无法找到问题。
我(必须)使用NTLM身份验证,这是通过AuthenNTLM Apache模块完成的:
Order allow,deny
Allow from all
PerlAuthenHandler Apache2::AuthenNTLM
AuthType ntlm
AuthName "Protected Access"
require valid-user
PerlAddVar ntdomain "domainName server"
PerlSetVar defaultdomain domainName
PerlSetVar ntlmsemtimeout 2
PerlSetVar ntlmdebug 1
PerlSetVar splitdomainprefix 0
cURL需要获取的所有文件都会覆盖AuthenNTLM身份验证:
order deny,allow
deny from all
allow from 127.0.0.1
Satisfy any
由于这些文件只是来自同一服务器的cURL的fectehd,因此访问权限可以限制为localhost。
可能的问题是:
对于通过cURL请求的文件,不会覆盖NTLM身份验证(即使设置了AllowOverride All)
curl在linux上的工作方式不同
$ch = curl_init();
curl_setopt($ch, CURLOPT_COOKIE, $strCookie);
curl_setopt($ch, CURLOPT_URL, $baseUrl . $queryString);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$html = curl_exec($ch);
curl_close($ch);
其他
Apache日志说:
[错误]错误/缺少/myApp/webservice/local/viewList.php的NTLM /基本授权标头
但是这个目录应该覆盖NTLM身份验证
编辑:
使用来自windows的curl命令行访问相同的资源我得到:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
<title>406 Not Acceptable</title>
</head>
<body>
<h1>Not Acceptable</h1>
<p>An appropriate representation of the requested resource /myApp/webservice/myResource could not be found on this server.</p>
Available variants:
<ul>
<li><a href="myResource.php">myResource.php</a> , type application/x-httpd-php</li>
</ul>
<hr>
<address>Apache/2.2.20 (Ubuntu) Server at localhost Port 80</address>
</body>
</html>
答案 0 :(得分:1)
问题是Ubuntu上的默认Apache配置:
Options Indexes FollowSymLinks MultiViews
MultiViews正在将myResource中的request_uri更改为myResource.php。
解决方案:
我选择了最后一个选项,因为无论配置如何都应该有效,我只有3个这样的文件,因此更改大约需要30秒......