如何让 Apache 跟随符号链接?

如何让 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>

答案1

这里有两件事:

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

答案2

使用带有 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 中的每个权限。还需要目标目录的权限,并且根据目录的目标,用户 www-data 可能也需要写权限。

线索来自https://stackoverflow.com/a/14623574

答案3

该选项必须像这样使用:

Options +FollowSymLinks

通常它被放在 Apache 配置(httpd.confconf.d/sites-enabled/)里面<Directory>

OptionsAllowOverride<Directory>在 Apache 文档中。

答案4

直到安装了 autoindex apache 模块,我才让它工作。在众多博客文章和论坛帖子中,没有人提到这是必要的。希望这对某些人有帮助。

相关内容