apacheicloudmacos-catalinaicloud-drive

403 Forbidden : Apache not working after moving document root folder to iCloud drive


So i'm using MacOS Catalina and my Apache environment was running sweet until i decided to move my document root to the iCloud drive, to keep it backed up.

Before my document root was :

/users/admin/www

And now it is

/users/admin/Library/Mobile Documents/com~apple~CloudDocs/www

I edited httpd.conf accordingly :

DocumentRoot "/users/admin/Library/Mobile Documents/com~apple~CloudDocs/www"
<Directory "/users/admin/Library/Mobile Documents/com~apple~CloudDocs/www">
    Options FollowSymLinks Multiviews SymLinksIfOwnerMatch
    MultiviewsMatch Any
    AllowOverride All
    Require all granted
</Directory>

<Directory "/users/admin/Library/Mobile Documents/com~apple~CloudDocs/www/myfolder">
    Options +FollowSymLinks +Multiviews +SymLinksIfOwnerMatch
    MultiviewsMatch Any
    AllowOverride All
    Allow from All
    Require all granted
</Directory>

Restarted Apache, restarted the machine but now i can access 127.0.0.1, EXCEPT one specific folder (let's call it www/myfolder). When i try to access 127.0.0.1/myfolder, i get the error below :

Forbidden
You don't have permission to access / on this server.

Checking the apache log file, this is the error i'm getting :

[Thu Oct 24 14:00:24.830700 2019] [access_compat:error] [pid 61703] [client 127.0.0.1:57804] AH01797: client denied by server configuration: /users/admin/Library/Mobile Documents/com~apple~CloudDocs/www/myfolder/public_html/

What am i missing here ? Please help, i need to work :D


Solution

  • First thing I am seeing is that you are using Apache 2.4 style syntax in your directory block, but then in your error log the module throwing the error is access_compat. Per the Apache documentation:

    The directives provided by mod_access_compat have been deprecated by mod_authz_host. Mixing old directives like Order, Allow or Deny with new ones like Require is technically possible but discouraged. This module was created to support configurations containing only old directives to facilitate the 2.4 upgrade

    Next clue is the error code: AH01797. This is caused by a server configuration issue:

    Client denied by server configuration

    This error means that the access to the directory on the file system was denied by an Apache configuration.

    I am assuming here that you are actually using 2.4, and that access_compat is enabled by mistake.

    Take a look through your configuration files again, and find the LoadModule directive that is loading mod_access_compat, and comment it out. It might be in your httpd.conf file, but there are numerous different styles of organizing and configuring an Apache install, so it could be elsewhere. If you have a Debian-style install, you need to remove the symbolic link /etc/apache2/mods_enabled/mod_access_compat. Grep -R access_compat * might help.

    EDIT 2 more observations:

    1. In the second directory stanza, you have
    Allow from all
    Require all granted
    

    Which is mixing old directive syntax with new, and is also redundant. Disable access_compat again, and also remove that Allow from all line before restarting Apache.

    1. I don't think the second directory stanza is even necessary. You could probably delete the whole block and restart the server, and it would work.

    First try (1) by disabling access_compat and removing that Allow directive from your httpd.conf file, and restart apache using apache2ctl -k graceful. If that doesn't work, comment out the entire second directory stanza and restart again.

    I am about 50% sure this will fix it. If it doesn't then I will really need to see your entire httpd.conf file before I can troubleshoot further.