CentOS 6を新しくインストールしましたが、ドキュメントルートに開発ファイルを指すシンボリックリンクがあります。
[root@localhost html]# ls -l
total 4
-rwxrwxrwx. 1 root root 0 Sep 18 20:16 index.html
-rwxrwxrwx. 1 root root 17 Sep 18 20:16 index.php
lrwxrwxrwx. 1 root root 24 Sep 18 20:19 refresh-app -> /home/billy/refresh-app/
私のhttpd.confには次のものがあります。
<Directory "/">
Options All
AllowOverride None
Order allow,deny
Allow from all
</directory>
シンボリックリンクの宛先には、Apache が望む内容を読むことを許可する権限があります。
[root@localhost billy]# ls -l
total 40 (Some entries were omitted because the list was too long
drwxr-xr-x. 7 billy billy 4096 Sep 18 20:03 refresh-app
また、次のようにSELinuxを無効にしてみました/etc/selinux/conf
。
SELINUX=disabled
しかし、私が何をしても、誰かがリンクにアクセスしようとすると、http://localhost/refresh-app/
次の403 FORBIDDENエラーページが表示されます/var/log/httpd/error_log
。
Symbolic link not allowed or link target not accessible
Apacheがシンボリックリンクのターゲットにアクセスできないのはなぜですか?
答え1
問題が発見されました。 Apacheは私が提供するディレクトリだけでなく、/home/billy/refresh-app/
その上のすべてのディレクトリ、つまり、/home/billy/
および/home
にもアクセスしたいと思いました/
。 (なぜかわかりません…誰かにサブディレクトリへのアクセス権を与えても、そのサブディレクトリの上のすべてのエントリに対する権限を放棄する必要はありません…)
何かを探していると思います.htaccess
。あるいは、* nixがディレクトリ巡回に対する権限を処理する方法が奇妙な場合があります。
答え2
同様の問題が発生しました。 Ubuntu 10では動作しましたが、Ubuntu 14(Apache 2.4)では動作が停止し、次の設定がありました。
<Directory /var/www/vhosts/example.com/httpdocs>
Options +FollowSymLinks
</Directory>
これに切り替えることで問題は解決しました(Webサーバーユーザーがシンボリックリンクに直接アクセスできない場合でも)。
<Directory /var/www/vhosts/example.com/httpdocs>
Options +ExecCGI +FollowSymlinks -SymLinksIfOwnerMatch
</Directory>
私が知っている限り、これは-SymLinksIfOwnerMatch
Apache 2.4の変更に関連する設定であり、正確な原因を調査しようとしませんでした。
私はこれがPHP制限のためかもしれないと思ったが、openbase_dir
そうではなかった。
答え3
このエラーは、暗号化されたフォルダに接続している場合にも発生する可能性があります。
答え4
「FollowSymLinks」はhttpd.confに必要なオプションのようです。詳細ここ。 htdocsでもルールが欲しいと思いますが、これは必要なオプションです。