Bagaimana saya membuat Apache mengikuti symlink?

98

Dalam folder www apache saya ( /var/wwwdi ubuntu 10.10) saya punya:

mydir -> /home/user/mydir

(yang saya buat dengan ln -s)

Sekarang, jika saya ingin melihat daftar file mydirdari web, saya harus memberikan arahan apache FollowSymLinks, kan?

Tapi di mana saya meletakkannya? Dalam sebuah .htaccessfile? Dimana? Saya mencoba banyak cara tetapi saya tidak memahaminya ...

Ini /etc/apache2/sites-enabled/000-defaultfile saya :

<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>
luca
sumber
Saya juga mencoba dengan Alias ​​di file konfigurasi .. masih tidak berfungsi ..
luca

Jawaban:

65

Ada dua hal di sini:

  1. symlinks
  2. daftar direktori

symlinks

Dengan asumsi /var/wwwDocumentRoot Anda untuk host virtual default Anda, Anda harus menemukan file konfigurasi virtual host default Anda (mungkin /etc/apache2/sites-enabled/000-default) dan memasukkannya ke dalam blok host virtual itu, misalnya

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

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

Jika Anda belum mengubah apa pun, opsi itu seharusnya sudah ada di sana.

daftar direktori

Untuk membuat Apache mendaftar file dalam direktori, Anda perlu mengaktifkan Indexesopsi juga, misalnya mengubah

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

masuk /etc/apache2/sites-enabled/000-defaultke:

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

Atau, mungkin cara yang lebih aman adalah mengubahnya menjadi:

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

dan memasukkan ini ke dalam /home/user/mydir/.htaccess.

    Option Indexes

mengapa .htaccess tidak berfungsi

Secara default, menempatkan Options <something>dalam .htaccessberkas tidak akan bekerja karena masuknya lain di file konfigurasi Anda: AllowOverride None.

Itu sebabnya kita harus meletakkannya di AllowOverride Indexessana.

( Dokumentasi AllowOverride )

Mikel
sumber
lihat file konfigurasi saya di atas ... belum berfungsi ...
luca
dapatkah itu menjadi masalah izin? Saya pengguna root, saya tahu itu bukan hal yang baik untuk menggunakan sistem sebagai root, pokoknya .. Saya root dan direktori yang saya simlink ada di root home / root / mydir ..
luca
1
Iya. Apa pesan kesalahan yang Anda lihat? Anda perlu melakukannya sudo chmod ugo+x /root; sudo chmod ugo+rx /root/mydiruntuk membuatnya bekerja, dan itu mungkin bukan ide yang baik. Lebih baik memindahkan file di suatu tempat di bawah /var/wwwjika Anda bisa.
Mikel
Setiap kali Anda mendapatkan kesalahan dan meminta bantuan, Anda harus memberikan pesan kesalahan yang tepat kepada kami. Dan akan ada petunjuk di /var/log/apache2/error.log.
Mikel
7
Pastikan Anda tidak menunjuk ke direktori home Anda ketika dienkripsi, yaitu tautan simbolik di /var/www/home/user/directory. Ini akan menghasilkan sakit kepala yang sangat besar.
11

Opsi harus digunakan seperti ini:

Options +FollowSymLinks

Biasanya diletakkan di konfigurasi Apache ( httpd.confatau conf.d/atau sites-enabled/) di dalam a <Directory>.

Lihat Options, AllowOverridedan <Directory>dalam dokumentasi Apache.

grawity
sumber
1
Dalam hal FollowSymLinks secara khusus, ia harus berada di dalam struktur direktori ketika berada dalam file .conf. Dari manual Apache saat ini "Opsi FollowSymLinks dan SymLinksIfOwnerMatch hanya berfungsi di bagian <Directory> atau file .htaccess."
ClearCrescendo
1
Peringatan: Mencampur Opsi dengan tanda + atau - dengan yang tidak merupakan sintaks yang valid dan kemungkinan akan menyebabkan hasil yang tidak diharapkan.
kurdtpage
10

Dengan konfigurasi asli (segar) pada Ubuntu 14.04 dengan apache 2.4.7, tidak perlu mengubah apa pun di * .conf untuk mengikuti symlink yang dibuat di bawah / var / www / html.

Tetapi perlu bahwa pengguna www-data memiliki akses ke SEMUA jalur target symlink (bahkan untuk virtualhosts tidak hanya untuk simlink). Misalnya,

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

Dalam contoh ini pengguna www-data (atau semua pengguna jika Anda mau, tetapi bisa berbahaya) perlu menjalankan hak sampai ke direktori. Perlu hak x di setiap / path, / path / ke, dan / path / ke / mirror. Juga perlu izin Baca di direktori target, dan, tergantung pada tujuan direktori, mungkin pengguna www-data juga perlu izin menulis.

Clue diperoleh dari https://stackoverflow.com/a/14623574

menang
sumber
1

Saya tidak bisa menjalankan ini sampai menginstal modul apache autoindex. Dari banyak posting blog dan posting forum, tidak ada yang menyebutkan itu perlu. Semoga ini bisa membantu seseorang.

aslibryan
sumber