題 如何讓Apache遵循符號鏈接?


在我的apache www文件夾中(/var/www 在ubuntu 10.10)我有:

mydir -> /home/user/mydir

(我創造的 ln -s

現在,如果我想查看文件列表 mydir 從網上,我必須給apache指令 FollowSymLinks, 對?

但是我把它放在哪裡?在一個 .htaccess 文件?哪裡?我嘗試了很多方法,但我不明白......

這是我的 /etc/apache2/sites-enabled/000-default 文件:

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

87
2018-02-10 21:52


起源


我也嘗試在配置文件中使用別名..仍然無法正常工作.. - luca


答案:


這裡有兩件事:

  1. 符號鏈接
  2. 目錄列表

符號鏈接

假設 /var/www 是您的默認虛擬主機的DocumentRoot,您應該找到您的默認虛擬主機配置文件(可能是 /etc/apache2/sites-enabled/000-default並將其放在該虛擬主機塊內,例如

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

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

如果你沒有改變任何東西,那個選項應該已經存在。

目錄列表

要使Apache列出目錄中的文件,您需要啟用 Indexes 選項也是,例如更改

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

/etc/apache2/sites-enabled/000-default 至:

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

或者,或許更安全的方法是將其更改為:

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

並把它放進去 /home/user/mydir/.htaccess

    Option Indexes

為什麼.htaccess不起作用

默認情況下,推桿 Options <something> 在一個 .htaccess 由於配置文件中的其他條目,文件將無法工作: AllowOverride None

這就是為什麼我們必須放 AllowOverride Indexes 那裡。

AllowOverride文檔


59
2018-02-10 21:56



看看我上面的配置文件...它還不行...... - luca
這可能是權限問題嗎?我是root用戶,我知道以root身份使用系統並不是一件好事。無論如何..我是root用戶,我符號鏈接到的目錄是root home / root / mydir .. - luca
是。您看到了什麼錯誤消息?你需要做 sudo chmod ugo+x /root; sudo chmod ugo+rx /root/mydir 使它工作,這可能不是一個好主意。最好將文件移到某處 /var/www 如果你可以的話。 - Mikel
每當您收到錯誤並要求幫助時,您都應該向我們提供確切的錯誤消息。並且會有線索 /var/log/apache2/error.log。 - Mikel
當你加密它時,確保你沒有指向你的主目錄,即一個符號鏈接 /var/www → /home/user/directory。這將產生巨大的麻煩。


使用帶有apache 2.4.7的Ubuntu 14.04上的原始(新)配置,無需更改* .conf中的任何內容以遵循在/ var / www / html下創建的符號鏈接。

但是用戶www-data必須能夠訪問 所有 符號鏈接目標的路徑(即使虛擬主機不僅適用於simlink)。例如,

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

在此示例中,用戶www-data(或所有用戶,如果您需要,但可能是危險的)需要 執行 權限一直到目錄。在/ path,/ path / to和/ path / to / mirror中需要x權限。還需要  目標目錄的權限,並且,根據目錄的目標,用戶www-data也可能需要寫入權限。

線索來自 https://stackoverflow.com/a/14623574


10
2017-10-02 19:14





該選項必須像這樣使用:

Options +FollowSymLinks

通常它放在Apache配置中(httpd.conf 要么 conf.d/ 要么 sites-enabled/在裡面 <Directory>

看到 OptionsAllowOverride 和 <Directory> 在Apache文檔中。


10
2018-02-10 22:00



對於FollowSymLinks,特別是在.conf文件中時,它必須位於Directory結構中。從Apache當前手冊“FollowSymLinks和SymLinksIfOwnerMatch選項僅在<Directory>部分或.htaccess文件中工作”。 - ClearCrescendo
警告:將帶有+或 - 的選項與沒有選項的選項混合使用語法無效,可能會導致意外結果。 - kurdtpage


在安裝autoindex apache模塊之前,我無法正常工作。在眾多博客文章和論壇帖子中,沒有人提到它是必要的。希望這有助於某人。


1
2017-09-10 15:31