質問: apacheがこのディレクトリエイリアスで「ファイルが存在しません」と言うのはなぜですか? 小さなwebサーバーをセットアップしています。 apacheがエイリアスを見つけられないという問題があります。私のdocumentrootは/ var/www/htdocsですが、ウェブサイトで表示できるようにしたい/ home/user/documents/a_directory/currentcapturesの下の別の(より大きな)パーティションにいくつかのファイルがあります。私の/var/www/conf/httpd.confには、次の2つのエイリアスがあります。alias /icons/ "/var/www/icons/" <directory "/var/www/icons/"> options indexes allowoverride none order allow,deny allow from all </directory> # added by me alias /currentcaptures "/home/user/documents/a_directory/currentcaptures" <directory "/home/user/documents/a_directory/currentcaptures"> options indexes allowoverride none order allow,deny allow from all </directory> そこに/icons/エイリアスを残してテストしましたが、ブラウザでhttp://localhost/icons/に移動すると、機能します。しかし、http://localhost/currentcaptures/に行こうとすると、404 notfoundエラーが発生します。/ var/www/logs/error_logで、次のエラーが発生します。[2014年8月4日月曜日11:02:30] [エラー] [クライアント192.168.10.100]ファイルが存在しません:/ home/user/documents/a_directory/currentcaptures /何か案は?
回答: apacheプロセスには/ home/userにアクセスする権限がない可能性があります。apacheは通常、非特権ユーザーとして実行されます(通常、「http」、「httpd」、または「www-data」という名前ですが、バリエーションがあります)。そのユーザーには、別のユーザーのホームディレクトリに移動する権限がありません。セキュリティを気にしない場合これを回避する最も簡単な方法は、ディレクトリにワールド実行権限(モード0711など)を追加し、ファイルにワールド読み取り権限(0644)を追加することです。 webサーバーで利用できるようにしたい。ディレクトリでは、「実行」は下に移動することを意味し、「読み取り」はディレクトリ内のファイルを一覧表示することを意味します。したがって、実行権限を付与することで、webサーバーが既知のファイルを読み取ることを許可します(ファイルの権限に従います)が、その内容を列挙することはできません。ディレクトリ。より「正しい」解決策ファイルをユーザー固有ではないディレクトリ階層に移動することです。これは、たとえば、ファイルを別の場所(特定のユーザーのホームディレクトリの外)に移動するか、バインドマウントを使用して行うことができます。ファイルのアクセス許可は引き続き有効であるため、ファイルはwebサーバーで読み取り可能である必要がありますが、webサーバーにホームディレクトリへのアクセスを許可する必要はありません。