如何让Apache遵循符号链接?


98

在我的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>

我也尝试在配置文件中使用别名。.仍然不起作用..
luca

Answers:


65

这里有两件事:

  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选项,例如change

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


看看上面的我的配置文件...还不行...
luca

会不会是权限问题?我是root用户,无论如何我都知道将系统用作root用户不是一件好事。.我是root,我链接到的目录位于根目录home / root / mydir中。–
luca

1
是。您看到什么错误消息?您需要做sudo chmod ugo+x /root; sudo chmod ugo+rx /root/mydir一些工作才能使它起作用,这可能不是一个好主意。/var/www如果可以的话,最好将文件移到下面的某个位置。
Mikel

每当您遇到错误并寻求帮助时,都应向我们提供确切的错误消息。并且会有线索/var/log/apache2/error.log
Mikel

7
加密主目录后,请确保未指向主目录,即/var/www→中的符号链接/home/user/directory。它将产生巨大的头痛。

11

该选项必须这样使用:

Options +FollowSymLinks

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

OptionsAllowOverride<Directory>Apache的文档。


1
特别是对于FollowSymLinks,当位于.conf文件中时,它必须位于目录结构中。从Apache当前的手册“ The FollowSymLinks和SymLinksIfOwnerMatch选项仅在<Directory>部分或.htaccess文件中起作用。”
2014年

1
警告:将带有+或-的选项与不带有+或-的选项混合使用是无效的语法,并且可能会导致意外的结果。
kurdtpage

10

使用Apache 2.4.7的Ubuntu 14.04上的原始(新)配置,无需更改* .conf中的任何内容即可遵循在/ var / www / html下创建的符号链接。

但是有必要使用户www-data有权访问符号链接目标的所有路径(甚至对于虚拟主机而言,不仅对于Simlinks)。例如,

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获得的


1

在安装autoindex apache模块之前,我无法正常工作。在众多博客文章和论坛文章中,没有人提到这是必要的。希望这对某人有帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.