如何让 Apache 遵循符号链接?

luc*_*uca 110 apache-http-server webserver

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

mydir -> /home/user/mydir
Run Code Online (Sandbox Code Playgroud)

(我创建的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>
Run Code Online (Sandbox Code Playgroud)

Mik*_*kel 76

这里有两件事:

  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>
Run Code Online (Sandbox Code Playgroud)

如果您没有更改任何内容,则该选项应该已经存在。

目录列表

要让 Apache 列出目录中的文件,您还需要启用该Indexes选项,例如更改

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
Run Code Online (Sandbox Code Playgroud)

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

    <Directory />
        Options FollowSymLinks Indexes
        AllowOverride None
    </Directory>
Run Code Online (Sandbox Code Playgroud)

或者,也许更安全的方法是将其更改为:

    <Directory />
        Options FollowSymLinks
        AllowOverride Indexes
    </Directory>
Run Code Online (Sandbox Code Playgroud)

并将其放入/home/user/mydir/.htaccess.

    Option Indexes
Run Code Online (Sandbox Code Playgroud)

为什么 .htaccess 不起作用

默认情况下,将Options <something>在一个.htaccess文件不会因为你的配置文件中的其他项目的工作:AllowOverride None

这就是为什么我们必须把它放在AllowOverride Indexes那里。

AllowOverride 文档

  • 确保您在加密时没有指向您的主目录,即`/var/www` → `/home/user/directory` 中的符号链接。它会产生巨大的头痛。 (7认同)
  • 是的。您看到什么错误消息?您需要执行“sudo chmod ugo+x /root;” sudo chmod ugo+rx /root/mydir` 使其工作,这可能不是一个好主意。如果可以的话,最好将文件移动到“/var/www”下的某个位置。 (2认同)

use*_*686 13

该选项必须像这样使用:

Options +FollowSymLinks
Run Code Online (Sandbox Code Playgroud)

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

OptionsAllowOverride<Directory>Apache的文档。

  • 警告:将带有 + 或 - 的选项与没有的混合是无效的语法,可能会导致意外结果。 (2认同)

小智 12

使用带有 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
Run Code Online (Sandbox Code Playgroud)

在此示例中,用户 www-data(或所有用户,如果需要,但可能很危险)需要一直到目录的执行权限。在 /path、/path/to 和 /path/to/mirror 中的每一个都需要 x 权限。还需要对目标目录的读取权限,并且根据目录的目标,用户 www-data 可能也需要写入权限。

线索来自/sf/answers/1023650211/