これは機能しません:
ErrorDocument 401 ../../src/wrong_pwd.php
パスをテキストとしてレンダリングし、実際に印刷します
../../src/wrong_pwd.php
実際のファイルは出力されません。
絶対パスを入力すると、/var/www/home
の内容がレンダリングされます(理由はわかりませんが、httpd.confにあるのでしょうか?)
どうやってやるの?
docs 言う:
URLは、ローカルWebパス(DocumentRootに対して)のスラッシュ(/)で始めることも、クライアントが解決できる完全なURLにすることもできます。または、ブラウザに表示するメッセージを提供することもできます。
_../../src/wrong_pwd.php
_はスラッシュで始まらないので、Apacheはそれをメッセージとして扱うと思います。 DocumentRoot
の外にあるドキュメントを返すことはできないようですので、あなたが望むものは決して機能しないと思います(これは賢明です。結局のところ、クライアントは次の場合にドキュメントを取得できる必要があります。エラー)。
Alias
を使用して、エラーページをドキュメントルート外の場所にエイリアスできる場合があります。何かのようなもの:
_Alias /error/wrong_pwd.php /path/to/src/wrong_pwd.php
ErrorDocument 401 /error/wrong_pwd.php
_
未テスト、YMMVなど。<Directory
>ブロックを使用してこのディレクトリへのアクセスを明示的に許可する必要がある場合があります。 mod_alias のドキュメントを参照してください。もちろん、ここにはセキュリティ上の懸念があります。一般的に、ソースを世界に公開したくないでしょう。 (これが事実である場合、おそらくあなたは軽量でウェブに見えるPHPラッパーをinclude()s
_/path/to/src/wrong_pwd.php
_...)にすることができます)
シンボリックリンクを試しましたか?
ln -s ../../src/wrong_pwd.php src/wrong_pwd.php