Jak zezwolić na dostęp do dowiązania symbolicznego w mojej ~ / Sites / dla Apache pod Mac OS X Lion 10.7.2

12

Potrzebuję zezwolić na dostęp do katalogu z łączami sym w ~ / Sites z mojego Apache. Symlinkowałem takie katalogi

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

Teraz za każdym razem, gdy uruchamiam żądanie GET, otrzymuję odpowiedź 403

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

Jak mogę powiedzieć Apache, aby zezwalał na dostęp do katalogu z dowiązaniami symbolicznymi i jak powiedzieć Apache, aby zezwalał na to tylko w przypadku żądań wysłanych z hosta lokalnego.

Każda pomoc jest mile widziana.

Z poważaniem

robertj

robertj
źródło

Odpowiedzi:

10

Oto post na blogu, który napisałem, gdy próbowałem dowiedzieć się, jak zrobić dokładnie to, co próbujesz.

  1. Włącz udostępnianie w sieci na MAC, przechodząc do Prefrences systemu -> Udostępnianie -> Zaznacz Włącz udostępnianie w Internecie
  2. Zmodyfikuj plik username.conf znajdujący się w / private / etc / apache2 / users i dodaj dyrektywę „FollowSymLinks”:

    <Directory ”/ Users / yourUserName / Sites /”>
        Opcje Indeksy MultiViews FollowSymLinks
        AllowOverride None
        Zamów dozwolone, odmawiaj
        Pozwól od wszystkich
    </Directory>
    
  3. Zmodyfikuj plik /private/etc/apache2/httpd.conf i upewnij się, że wiersz pod „# Hostami wirtualnymi” nie jest komentowany, tak jak:

    Dołącz /private/etc/apache2/extra/httpd-vhosts.conf
    
  4. Zmodyfikuj plik /private/etc/apache2/extra/httpd-vhosts.conf i dodaj:

    <VirtualHost *: 80>  
        <Directory /Users/yourUserName/Sites/MyWebSite.com>
            Opcje + FollowSymlinks + SymLinksIfOwnerMatch
            AllowOverride All
        </Directory>
      DocumentRoot / Users / yourUserName / Sites / MyWebSite
      NazwaSerwera MyWebSite.local
    </VirtualHost>
    
  5. Zmodyfikuj plik / etc / hosts i dodaj go u góry:

    127.0.0.1 MyWebSite.local
    
  6. Utwórz dowiązanie symboliczne, aby połączyć swój katalog Code z katalogiem w katalogu Witryny.

    ln -s ~ / Code / MyWebSite ~ / Sites / MyWebSite
    
  7. Uruchom ponownie apache

kelsmj
źródło
1
Witamy w Super User! Byłoby miło dołączyć tutaj istotne części odpowiedzi i podać link tylko do wykorzystania w przyszłości.
slhck
Przeszedłem ze środowiska Xampp Zend do domyślnej konfiguracji Mac / Apache i po ponownym uruchomieniu byłem martwy w wodzie. Krok 2 był kluczowy. Dziękuję Ci!
Shanimal
2

W rzeczywistości konieczne są tylko pierwsze 2 kroki od odpowiedzi Emjay oraz restart apache, oto, co zadziałało dla mnie:

  1. Włącz udostępnianie sieciowe na MAC, przechodząc do Prefrences systemu -> Udostępnianie -> Sprawdź włączone udostępnianie internetowe

  2. Edytuj username.confplik znajdujący się w nim /private/etc/apache2/usersi dodaj dyrektywę FollowSymLinks :

    <Directory "/Users/yourUserName/Sites/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
    
  3. sprawdź konfigurację Apache

    sudo apachectl -t

  4. uruchom ponownie apache

    sudo apachectl restart

Teraz Apache będzie obsługiwał dowiązania symboliczne w twoim Siteskatalogu.

espinielli
źródło
1

Wystąpił 403 forbiddenbłąd. To, co rozwiązało mój problem httpd-vhosts.conf, zastąpiłem poniższą konfigurację

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

z

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

To samo zrobiło dla wszystkich tagów lokalizacji. Rozwiązało to problem z pozwoleniem.

VINUTHA
źródło
0

Options FollowSymLinks w httpd.conf dla odpowiedniego kontenera

  1. Znajdź ciąg DocumentRoot w conf, zapamiętaj jego wartość. Sprawdź zawartość <Directory "docroot here">...</Directory>sekcji pod kątem ciągu opcji. Jeśli brakuje opcji - dodaj ciąg Options FollowSymLinks, jeśli istnieje, ale nie ma FollowSymLinks - dodaj ten parametr, aby mieć coś podobnego Options Indexes FollowSymLinks. Uruchom ponownie Apache po modyfikacji config. Wynik testu, napisz go tutaj

  2. Przeczytaj dokumenty Apache

Leniwy Borsuk
źródło
Cześć, przepraszam - ta odpowiedź wcale nie pomaga.
robertj
Próbowałeś to zrobić ? wyłączyłeś FollowSymLinks w konfiguracji Apache, musisz włączyć na poziomie witryny lub katalogu, aby korzystać z dowiązań symbolicznych
Lazy Badger
i sprawdź uprawnienia do plików wewnątrz ~, obecność pliku DirectoryIndex po nim: rozwiąż zadanie kolejno, sprawdzając wszystkie możliwości
Lazy Badger
1
znowu - nie jestem w stanie zrobić nic z twoich komentarzy. Jestem całkowicie nowicjuszem w kwestii Apache (poza moim googlowaniem przez ostatnie 6 godzin) po prostu nie mam pojęcia, jaki jest odpowiedni pojemnik. Naprawdę pomocny byłby konkretny przykład konfiguracji httpd.conf i httpd-vhost.conf.
robertj
@robertj - To jest rozwiązanie twojego problemu. Musisz edytować ten plik i odpowiednio go zmodyfikować, jak powiedział @Lazy_Badger. Powinien znajdować się pod <Directory /usr/share/web>. Zauważ, że potem musisz zrestartować apache używającsudo /usr/sbin/apachectl restart
Steven Lu
0

Czasami dzieje się tak, jeśli:

  • Twój folder źródłowy znajduje się w systemie plików NTFS
  • Jeśli używasz już utworzonego folderu, który ma inne uprawnienia, prawdopodobnie od poprzedniego właściciela lub instalacji.

Rozwiązałem ten problem, tworząc nowy folder w systemie plików ext4 i tworząc symboliczne łącze do /var/www.

Aleksandr Leteckij
źródło
Jak to ma znaczenie dla PO korzystającego z OSX?
JoshP,