Come consentire l'accesso a un link simbolico in my ~ / Sites / for Apache in Mac OS X Lion 10.7.2


12

Devo consentire l'accesso a una directory sym-linked all'interno di ~ / Sites dal mio Apache. Ho ricollegato le directory in questo modo

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

Ora ogni volta che accendo una richiesta GET ricevo una risposta 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>
...

Come posso dire ad Apache di consentire l'accesso alla directory con collegamento simbolico e come posso dire ad Apache di consentire questo solo per le richieste attivate da localhost.

Qualsiasi aiuto è molto apprezzato.

I migliori saluti

robertj

Risposte:


10

Ecco un post sul blog che ho scritto quando stavo cercando di capire come fare esattamente quello che stai cercando di fare.

  1. Abilita la condivisione Web sul MAC andando su Preferenze di sistema -> Condivisione -> Seleziona Abilita condivisione Web
  2. Modifica il tuo file username.conf che si trova in / private / etc / apache2 / users e aggiungi la direttiva "FollowSymLinks":

    <Directory "/ Users / yourUserName / Sites /">
        Opzioni Indici MultiViews FollowSymLinks
        AllowOverride Nessuno
        Ordine consentire, negare
        Consenti a tutti
    </ Directory>
    
  3. Modifica il file /private/etc/apache2/httpd.conf e assicurati che la riga in "# Host virtuali" non sia commentata, in questo modo:

    Includi /private/etc/apache2/extra/httpd-vhosts.conf
    
  4. Modifica il file /private/etc/apache2/extra/httpd-vhosts.conf e aggiungi:

    <VirtualHost *: 80>  
        <Directory /Users/yourUserName/Sites/MyWebSite.com>
            Opzioni + SeguiSymlink + SymLinksIfOwnerMatch
            AllowOverride All
        </ Directory>
      DocumentRoot / Users / yourUserName / Sites / MyWebSite
      ServerName MyWebSite.local
    </ VirtualHost>
    
  5. Modifica il file / etc / hosts e aggiungilo in alto:

    127.0.0.1 MyWebSite.local
    
  6. Crea un Symlink per collegare la tua directory del codice a una nella directory dei siti.

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


1
Benvenuto in Super User! Sarebbe bello includere qui le parti essenziali della risposta e fornire il link solo per riferimento futuro.
slhck,

Sono passato dall'ambiente xampp zend all'impostazione predefinita mac / apache e dopo un riavvio era morto nell'acqua. Il passaggio 2 è stato fondamentale. Grazie!
Shanimal,

2

In effetti sono necessari solo i primi 2 passi dalla risposta di Emjay più un riavvio di Apache, ecco cosa ha funzionato per me:

  1. Abilita la condivisione Web sul MAC andando su Preferenze di sistema -> Condivisione -> Verifica la condivisione Web abilitata

  2. Modifica il tuo username.conffile che si trova in /private/etc/apache2/userse aggiungi la direttiva FollowSymLinks :

    <Directory "/Users/yourUserName/Sites/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
    
  3. controlla la tua configurazione di Apache

    sudo apachectl -t

  4. riavvia apache

    sudo apachectl restart

Ora Apache servirà i collegamenti simbolici nella tua Sitesdirectory.


1

Stavo ricevendo un 403 forbiddenerrore. Ciò che ha risolto il mio problema httpd-vhosts.conf, ho sostituito la seguente configurazione

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

con

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

Ha fatto lo stesso per tutti i tag di posizione. Ha risolto il problema dell'autorizzazione.


0

Options FollowSymLinks in httpd.conf per il contenitore appropriato

  1. Trova la stringa DocumentRoot in conf, ricorda il suo valore. Controlla il contenuto della <Directory "docroot here">...</Directory>sezione per la stringa Opzioni. Se Opzioni mancanti - aggiungi stringa Options FollowSymLinks, se esiste ma non ha FollowSymLinks - aggiungi questo parametro per avere smth like Options Indexes FollowSymLinks. Riavvia Apache dopo aver modificato config. Risultato del test, scrivilo qui

  2. Leggi i documenti di Apache


Ciao, scusa: questa risposta non aiuta affatto.
robertj,

Hai provato a farlo ? hai disabilitato FollowSymLinks nella configurazione di Apache, devi abilitare a livello di sito o di directory per utilizzare le risorse con collegamento simbolico
Lazy Badger

e controlla i permessi per i file all'interno ~, presenza del file DirectoryIndex dopo di esso: risolvi l'attività in sequenza, controllando tutte le possibilità
Lazy Badger

1
di nuovo - non sono in grado di ricavare nulla dai tuoi commenti. Sono un principiante assoluto riguardo Apache (a parte il mio googling nelle ultime 6 ore) Non ho idea di quale sia il contenitore appropriato . Ciò che sarebbe davvero utile è un esempio concreto di come configurare httpd.conf e httpd-vhost.conf.
robertj,

@robertj - Questa è la soluzione al tuo problema. Devi modificare quel file e modificarlo di conseguenza come ha detto @Lazy_Badger. Dovrebbe essere situato sotto <Directory /usr/share/web>. Si noti che in seguito è necessario riavviare apache utilizzandosudo /usr/sbin/apachectl restart
Steven Lu

0

A volte succede se:

  • La cartella di origine si trova su un file system NTFS
  • Se stai utilizzando una cartella già creata, con autorizzazioni diverse, probabilmente da un proprietario o un'installazione precedente.

Ho risolto questo problema creando una nuova cartella su un file system ext4 e creando un collegamento simbolico a /var/www.


In che modo ciò è rilevante per l'OP usando OSX?
JoshP,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.