How to allow acces to a symbolic link in my ~/Sites/ for Apache under Mac OS X Lion 10.7.2

31,289

Solution 1

Here is a blog post I wrote when I was trying to figure out how to do exactly what you are trying to do.

  1. Enable Web Sharing on the MAC by going to System Prefrences —> Sharing —> Check Enable Web Sharing
  2. Edit your username.conf file located in /private/etc/apache2/users and add the “FollowSymLinks” directive:

    <Directory "/Users/yourUserName/Sites/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
    
  3. Edit the /private/etc/apache2/httpd.conf file and make sure the line under “# Virtual hosts” is not commented out, like so:

    Include /private/etc/apache2/extra/httpd-vhosts.conf
    
  4. Edit the /private/etc/apache2/extra/httpd-vhosts.conf file and add:

    <VirtualHost *:80>  
        <Directory /Users/yourUserName/Sites/MyWebSite.com>
            Options +FollowSymlinks +SymLinksIfOwnerMatch
            AllowOverride All
        </Directory>
      DocumentRoot /Users/yourUserName/Sites/MyWebSite
      ServerName MyWebSite.local
    </VirtualHost>
    
  5. Edit the /etc/hosts file and add this at the top:

    127.0.0.1 MyWebSite.local
    
  6. Make a Symlink to link your Code directory to one in the Sites directory.

    ln -s ~/Code/MyWebSite ~/Sites/MyWebSite
    
  7. Restart apache

Solution 2

In fact only the first 2 steps from Emjay's answer plus an apache restart are necessary, here is what worked for me:

  1. Enable Web Sharing on the MAC by going to System Prefrences —> Sharing —> Check enabled Web Sharing

  2. Edit your username.conf file located in /private/etc/apache2/users and add the FollowSymLinks directive:

    <Directory "/Users/yourUserName/Sites/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
    
  3. check your apache config

    sudo apachectl -t

  4. restart apache

    sudo apachectl restart

Now Apache will serve the symbolic links under your Sites directory.

Solution 3

I was getting 403 forbidden error. What solved my problem is in httpd-vhosts.conf, I replaced the below config

<Location "/modulename">
  Order allow,deny
  Allow from all
</Location>

with

<Location "/modulename">
  Require all granted
</Location>

Did the same for all the Location tags. It solved the permission issue.

Share:
31,289

Related videos on Youtube

robertj
Author by

robertj

Updated on September 18, 2022

Comments

  • robertj
    robertj over 1 year

    I need allow access to a sym-linked directory within ~/Sites from my Apache. I Symlinked the directories like this

    ln -s ~/path/to/the/source/directory/ ~/Sites/source-link-here
    

    Now whenever I fire up a GET request I get a 403 reply

    curl http://localhost/~username/source-link-here/
    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html><head>
    <title>403 Forbidden</title>
    </head><body>
    <h1>Forbidden</h1>
    <p>You don't have permission to access /~username/source-link-here
    on this server.</p>
    ...
    

    How can I tell Apache to allow acces to the symlinked directory and how do I tell Apache to allow this only for requests fired from localhost.

    Any help is greatly appreciated.

    Best regards

    robertj

  • robertj
    robertj over 12 years
    Hi, sorry - This answer doesnt help at all.
  • Lazy Badger
    Lazy Badger over 12 years
    Did you tried do it? you disabled FollowSymLinks in Apache config, you must to enable at site or directory level in order to use symlinked resources
  • Lazy Badger
    Lazy Badger over 12 years
    and check permissions for files inside ~, presence of DirectoryIndex file after it: solve task sequentially, checking all possibilities
  • robertj
    robertj over 12 years
    again - I am not able to make anything out of your comments. I am a total newbee concerning Apache (apart from my googling for the last 6 hours) I simply have no clue what the appropriate container is. What would be really helpful is a concrete example how to configure httpd.conf and httpd-vhost.conf.
  • juuga
    juuga over 12 years
    @robertj - This is the solution to your problem. You need to edit that file and modify it accordingly like @Lazy_Badger said. It should be located under <Directory /usr/share/web>. Note that afterwards, you need to restart apache using sudo /usr/sbin/apachectl restart
  • slhck
    slhck over 12 years
    Welcome to Super User! It would be nice to include the essential parts of the answer here, and provide the link only for future reference.
  • Shanimal
    Shanimal almost 12 years
    I went from xampp zend environment to the default mac/apache setup and after a restart was dead in the water. Step 2 was key. Thank you!