Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I'm trying to run my php App on Ubuntu Server 11.10. This App works fine under Apache + PHP in windows. I have other applications that I can simply copy&paste between the 2 OS and they work on both. (These don't use cURL).

However this one uses the php library tonic (RESTful webservices) and makes us of php cURL module. The issue is I'm not getting an error message which makes it impossible to find the issue.

I (must) use NTLM authentication and this is done with AuthenNTLM Apache Module:

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

All files that cURL needs to fetch override AuthenNTLM authentication:

order deny,allow
deny from all
allow from 127.0.0.1
Satisfy any

Since these files are only fectehd by cURL from same server, access can be limited to localhost.

Possible issues are:

  • NTLM auth isn't overridden for files requested through cURL (even though AllowOverride All is set)

  • curl works differently on 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);
    
  • other?

Apache log says:

[error] Bad/Missing NTLM/Basic Authorization Header for /myApp/webservice/local/viewList.php

But this directory should override NTLM authentication

using curl command line from windows to access same resource i get:

<!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>

Note:

This is duplicate from http://stackoverflow.com/questions/9821979/php-curl-on-linux-what-is-the-difference-to-curl-on-windows Is it was suggested I post it here.

EDIT:

Please see

Ubuntu Server: Apache2 seems to attach .php to URI

as I discovered why it does not work but need help so the issue does not occur anymore.

ANSWER:

The issue is the default Apache configuration on Ubuntu:

Options Indexes FollowSymLinks MultiViews

MultiViews is changing request_uri from myResource to myResource.php.

Solutions:

  • disable MultiViews in .htaccess: Options -MultiViews
  • remove MultiViews from default config
  • rename the file as example to myResourceClass

I chose last option because that should work regardless of configuration and I only have 3 such files so the change took about 30 secs...

share|improve this question
add comment

1 Answer

up vote 0 down vote accepted

The issue is the default Apache configuration on Ubuntu:

Options Indexes FollowSymLinks MultiViews

MultiViews is changing request_uri from myResource to myResource.php.

Solutions:

  • disable MultiViews in .htaccess: Options -MultiViews
  • remove MultiViews from default config
  • rename the file as example to myResourceClass

I chose last option because that should work regardless of configuration and I only have 3 such files so the change took about 30 secs...

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.