まったく新しい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
/etc/selinux/conf
を変更して、SELinuxを無効にしてみました。
SELINUX=disabled
しかし、私が何をしようとも、誰かがそのリンクhttp://localhost/refresh-app/
にアクセスしようとすると、403 FORBIDDENエラーページが表示され、これは/var/log/httpd/error_log
に書き込まれます。
Symbolic link not allowed or link target not accessible
Apacheがシンボリックリンクのターゲットにアクセスできないのはなぜですか?
問題が見つかりました。結局のところ、Apacheは私がサービスを提供しているディレクトリ/home/billy/refresh-app/
だけでなく、その上のすべてのディレクトリ、つまり/home/billy/
、/home
、および/
へのアクセスも求めています。 (私はなぜだかわかりません...サブディレクトリへのアクセスを誰かに与えることは、そのサブディレクトリより上のすべてに許可を与えることを要求するべきではありません...)
私はそれが.htaccess
か何かを探していると思います、またはおそらく* nixがディレクトリトランスバーサルのアクセス許可をどのように扱うかについて奇妙です。
同様の問題があり、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の変更と関係がありますが、私は正確な原因を調査しようとしませんでした。
私はそれがopenbase_dir
PHPに制限がありますが、そうではありませんでした。
このエラーは、暗号化されたフォルダにリンクしている場合にも発生する可能性があります。
「FollowSymLinks」はhttpd.confで必要なオプションのようです。詳細 こちら 。 htdocsにもルールが必要なようですが、それは必要なオプションです。
Options +FollowSymLinks
これで.htaccessファイルを作成しました(私にシンボリックリンクの前にdirに入れてください)。
また、selinuxが強制されているかどうかを確認することもできます。 RedHat/Fedoraでこれを実行します。
getenforce
応答が「Enforcing」の場合、実行することができます
setenforce 0
ブラウザーでURLを再試行してください。
Selinuxを無効にすることがこの問題を解決する最良の方法であるとは言っていませんが、原因を特定するのに役立つ場合があります。
@Billey ONeil @Flion答えられなかった(担当者数が少ない)
ここで私はしなければなりませんでした:
(注:エイリアスll = 'ls $ LS_OPTIONS -lh')
root@Bellach:/var/www/html# ll lego
lrwxrwxrwx 1 root root 43 Sep 10 21:21 lego -> /home/DATA/Documents/Chris/Synced/web/lego/
ソースリンクのすべてのディレクトリを見てください
root@Bellach:/var/www/html# ll -d /home/DATA/Documents/Chris/Synced/web/
drwxr-xr-x 9 chris chris 4.0K Sep 12 2017 /home/DATA/Documents/Chris/Synced/web/
root@Bellach:/var/www/html# ll -d /home/DATA/Documents/Chris/Synced/
drwxr-xr-x 20 chris chris 4.0K Mar 27 18:52 /home/DATA/Documents/Chris/Synced/
root@Bellach:/var/www/html# ll -d /home/DATA/Documents/Chris/
drwxr-xr-x 36 chris chris 4.0K Jun 17 23:31 /home/DATA/Documents/Chris/
root@Bellach:/var/www/html# ll -d /home/DATA/Documents/
drwxr-xr-x 21 chris chris 4.0K Aug 7 18:22 /home/DATA/Documents/
root@Bellach:/var/www/html# ll -d /home/DATA/
drwxrwxr-- 10 root users 4.0K Sep 10 11:17 /home/DATA/
root@Bellach:/var/www/html# ll -d /home/
drwxr-xr-x 5 root root 4.0K Sep 10 10:37 /home/
/ home/DATAディレクトリが原因です。
これで修正してください:
root@Bellach:/var/www/html# chmod +x /home/DATA/
root@Bellach:/var/www/html# ll -d /home/DATA/
drwxrwxr-x 10 root users 4.0K Sep 10 11:17 /home/DATA/
修正は即座に行われます-Apacheを再起動する必要はありません。
私の解決策は、/home/repo
という名前のすべてのリポジトリ用の共有フォルダを作成することでした。
次に、自分の家から次のようにシンボリックリンクします:ln -s /home/repo ~/Code
so ~/Code/www.xxxx.com/public
は/home/repo/www.xxxx.com/public
を指します
また、Apache Webルートへのリンク/var/www/html
は/home/repo/www.xxxx.com/public
を指します
ここで見つかりました: https://github.com/alghanmi/ubuntu-desktop_setup/wiki/Git-Local-Repository-Setup-Guide
一部のsymlink + userグループのアクロバシーを使用すると、複数のユーザー/バージョンをデプロイできます。
すべての許可を許可し、followsymlinkを許可した後で問題が解決することを確認します。「FollowSymLinksの場合、具体的には、.confファイル内のディレクトリ構造内に存在する必要があります。Apacheの現在のマニュアルから
FollowSymLinksおよびSymLinksIfOwnerMatchオプションは、セクションまたは.htaccessファイルでのみ機能します。