web-dev-qa-db-ja.com

Apacheにシンボリックリンクをたどらせる方法は?

私のApache wwwフォルダ(ubuntu 10.10の/var/www)には、

mydir -> /home/user/mydir

(私はln -sで作成しました)

さて、Webから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>
98
luca

ここに2つのことがあります。

  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のドキュメント

64
Mikel

このオプションは次のように使用しなければなりません。

Options +FollowSymLinks

通常、それはhttpd.conf内のApache設定(conf.d/またはsites-enabled/または<Directory>)に置かれます。

OptionsAllowOverride 、および を参照してください。 Apacheのドキュメントの<Directory>

11
grawity

Apache 2.4.7を使用したUbuntu 14.04上の元の(新しい)設定では、/ var/www/htmlの下に作成されたシンボリックリンクをたどるために* .conf内の何かを変更する必要はありません。

しかし、www-dataユーザーがALLシンボリックリンクターゲットのパスにアクセスできることが必要です(simlinksだけでなく仮想ホストの場合でも)。例えば、

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

この例では、ユーザwww-data(または望むなら全てのユーザですが、危険かもしれません)はexecuterightsをディレクトリまでずっと必要とします。/path、/ path/to、および/ path/to/mirrorのそれぞれにx権限が必要です。ターゲットディレクトリに対するReadpermissionも必要です。また、ディレクトリの目的によっては、www-dataユーザーにも書き込み権限が必要です。

手がかりは https://stackoverflow.com/a/14623574 から取得しました

10
victe

Autoindex Apacheモジュールをインストールするまで、私はこれを動かすことができませんでした。多数のブログ投稿やフォーラム投稿の中で、誰もそれが必要であるとは述べていません。これが誰かに役立つことを願っています。

1
originalbryan