Apache'nin sembolik bağlantıları takip etmesini nasıl sağlayabilirim?


98

Apache www klasörümde ( /var/www10.10'da) Bende:

mydir -> /home/user/mydir

(ben yarattım ln -s)

Şimdi, mydirweb’deki dosyaların bir listesini görmek istersem, apache direktifini vermek zorundayım FollowSymLinks, değil mi?

Ama nereye koyacağım? Bir .htaccessdosyada mı? Nerede? Birçok yol denedim ama anlamıyorum ...

Bu benim /etc/apache2/sites-enabled/000-defaultdosyam:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks Indexes
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

    Alias /downloads/ "/root/mydir/"
    <Directory "/root/mydir">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>

</VirtualHost>

Ayrıca config dosyasında bir Alias ​​ile denedim .. hala çalışmıyor ..
luca

Yanıtlar:


65

Burada iki şey var:

  1. sembolik bağlar
  2. rehber listesi

sembolik bağlar

/var/wwwVarsayılan sanal ana makineniz için DocumentRoot'unuz olduğunu varsayarak , varsayılan sanal ana bilgisayar yapılandırma dosyanızı (muhtemelen /etc/apache2/sites-enabled/000-default) bulmalı ve bu sanal ana bilgisayar bloğunun içine koymalısınız, örneğin

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

Hiçbir şeyi değiştirmediyseniz, bu seçenek zaten orada olmalıdır.

rehber listesi

Apache'nin bir dizindeki dosyaları listelemesi için bu Indexesseçeneği de etkinleştirmeniz gerekir , örneğin

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

içinde /etc/apache2/sites-enabled/000-default:

    <Directory />
        Options FollowSymLinks Indexes
        AllowOverride None
    </Directory>

Veya, belki de daha güvenli bir yol, onu şu şekilde değiştirmektir:

    <Directory />
        Options FollowSymLinks
        AllowOverride Indexes
    </Directory>

ve bunu içine koy /home/user/mydir/.htaccess.

    Option Indexes

neden .htaccess çalışmıyor

Varsayılan olarak, koyarak Options <something>bir in .htaccessdosyası çünkü yapılandırma dosyasında diğer giriş çalışmaz: AllowOverride None.

Bu yüzden AllowOverride Indexesoraya koymalıyız .

( AllowOverride belgeleri )


Yukarıdaki config dosyama bakın ... henüz işe yaramadı ...
luca

izinler sorunu olabilir mi? Kök kullanıcısıyım, bir sistemi kök olarak kullanmak iyi bir şey değil, zaten biliyorum. Köküm ve bağlantıya girdiğim dizin kök dizininde / home / root / mydir ..
luca

1
Evet. Hangi hata mesajını görüyorsunuz? sudo chmod ugo+x /root; sudo chmod ugo+rx /root/mydirÇalışması için yapmanız gerekecek ve bu muhtemelen iyi bir fikir değil. /var/wwwMümkünse dosyaları bir yere taşımak daha iyi olur .
Mikel

Ne zaman bir hata alırsanız ve yardım isterseniz, bize tam bir hata mesajı vermelisiniz. Ve içeride ipuçları olacak /var/log/apache2/error.log.
Mikel

7
Şifrelenmiş olduğunuzda giriş dizini göstermediğinizden emin olun, örn. /var/www→ sembolik bir bağlantı /home/user/directory. Büyük bir baş ağrısı üretecek.

11

Seçenek şu şekilde kullanılmalıdır:

Options +FollowSymLinks

Genellikle a içindeki Apache konfigürasyonuna ( httpd.confya conf.d/da sites-enabled/) konulur <Directory>.

Bkz Options, AllowOverrideve <Directory>Apache belgelerinde.


1
Özellikle FollowSymLinks durumunda, bir .conf dosyasındayken bir Directory yapısının içinde OLMALIDIR. Apache'nin şu anki el kitabından "FollowSymLinks ve SymLinksIfOwnerMatch Seçenekleri yalnızca <Directory> bölümlerinde veya .htaccess dosyalarında çalışır."
ClearCrescendo

1
Uyarı: Seçenekleri + veya - ile karıştırmak, sözdizimi geçerli olmayanlarla ve beklenmeyen sonuçlara neden olabilir.
kurdtpage

10

Apache 2.4.7 ile Ubuntu 14.04'teki orjinal (yeni) konfigürasyon ile, / var / www / html altında oluşturulan sembolik linkleri takip etmek için * .conf dosyasındaki hiçbir şeyi değiştirmenize gerek yoktur.

Ama kullanıcı www-data erişimi olduğundan gereklidir TÜM (hatta simlinks için sadece VirtualHosts için) Sembolik bağ hedefin yolu. Örneğin,

cd /var/www/html
ln -s /path/to/mirror/cran-mirror cran

Bu örnekte kullanıcı olarak www-data ihtiyaçlarını (veya tüm kullanıcılar isterseniz, ama tehlikeli olabilir) yürütmek tüm yol dizinine haklarını. / Path, / path / to ve / path / to / mirror öğelerinde x haklarına ihtiyacınız var. Ayrıca , hedef dizinde Okuma iznine ihtiyaç vardır ve dizinin amacına bağlı olarak, belki de kullanıcının www-data yazma izinleri gerekir.

İpucu https://stackoverflow.com/a/14623574 adresinden alınmıştır.


1

Autoindex apache modülünü takana kadar bu işlemi yapamadım. Çok sayıda blog yazısı ve forum yazısı arasından hiç biri gerekli olduğunu söylememiştir. Umarım bu birine yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.