Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

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

share|improve this question

4 Answers 4

up vote 8 down vote accepted

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

share|improve this answer
1  
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. –  slhck Nov 30 '11 at 12:06
    
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! –  Shanimal Jun 15 '12 at 13:58

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.

share|improve this answer

Options FollowSymLinks in httpd.conf for appropriate container

  1. Find DocumentRoot string in conf, remember it's value. Check content of <Directory "docroot here">...</Directory> section for Options string. If Options missing - add string Options FollowSymLinks, if exist but haven't FollowSymLinks - add this parameter in order to have smth like Options Indexes FollowSymLinks. Restart Apache after modifying config. Test result, write it here

  2. Read Apache docs

share|improve this answer
    
Hi, sorry - This answer doesnt help at all. –  robertj Nov 1 '11 at 12:03
    
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 Nov 1 '11 at 12:09
    
and check permissions for files inside ~, presence of DirectoryIndex file after it: solve task sequentially, checking all possibilities –  Lazy Badger Nov 1 '11 at 12:12
1  
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. –  robertj Nov 1 '11 at 12:22
    
@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 –  Steven Lu Nov 1 '11 at 15:29

Sometimes it's happening if:

  • Your source folder are on an NTFS file system
  • If you're using an already created folder, which has different permissions, probably from a previous owner or installation.

I sorted out this problem by creating a new folder on an ext4 file system and creating a symbolic link to /var/www.

share|improve this answer
    
How is this relevant to the OP using OSX? –  JoshP Oct 10 '12 at 17:08

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.