このフォルダ/ファイル構造を考えると:
private/.htpasswd
public/.htaccess
...ここで、public
はApacheの仮想ホストのルートフォルダーであり、private
はその兄弟フォルダーです。
.htaccess
ファイルにAuthUserFile
の相対パスを定義して、/private/.htpasswd
にアクセスできるようにするにはどうすればよいですか。
私はもう試した:
AuthType Basic
AuthUserFile ../private/.htpasswd
require valid-user
ただし、仮想ホストルートではなく、ServerRootに関連してファイルを検索しようとするため、これは機能しません。
本番サーバー(共有ホスト)の構成ファイルにアクセスできず、テストと本番ファイルシステムの構造が一致しないため、絶対パスを定義したくありません。
これらの条件を考慮して、私が望むことを達成することはまだ可能ですか?
テストシステムでシンボリックリンクを使用できます。例:/srv/www/vhost/private/.htpasswd -> /var/www/vhost/private/.htpasswd
。最初のパスは、実稼働サーバーと同じである必要があります。そうすれば、両方のサーバーで同じパスを使用できるようになります。 Options FollowSymLinks
これには必要な場合があります。 ServerRootに関連しない構成ファイルを含める方法がわかりません。
Selivanov Pavelによって投稿されたシンボリックリンクソリューションが機能しない場合は、ALlowOverride -AuthConfig
を使用して.htaccessのAuth *ディレクティブを無効にし(または.htaccessを完全に無効にして)、ローカルマシンのApacheconfにのみAuth構成を移動できます。
例を見てみましょう。
アプリケーションは/ var/www/myApp一部のLinuxサーバーにあります
。htaccess:/ var/www/myApp/.htaccess
htpasswdApp:/ var/www/myApp/htpasswdApp。 (。htpasswdファイルには任意の名前を自由に使用できます)
。htaccessで相対パスを使用するには:
AuthType Digest
AuthName myApp
AuthUserFile "htpasswdApp"
Require valid-user
ただし、server_rootディレクトリ内のファイルを検索します。 document_rootにはありません。
場合によっては、アプリケーションが/ var/www/myAppにある場合:
document_root is/ var/www/myApp
server_root is / etc/Apache2 //(この例では、linux serverを使用しているため)
Apache構成ファイル(/ etc/Apache2/Apache2.conf)で再定義できますが、それは悪い考えだと思います。
したがって、/ var/www/myApp/.htaccessで相対ファイルパスを使用するには、server_rootでパスワードのファイルを定義する必要があります。
私は次のコマンドでそれを行うことを好みます:
Sudo ln -s /var/www/myApp/htpasswdApp /etc/Apache2/htpasswdApp
コマンドをコピーするか、シンボルの代わりにハードリンクを使用するか、ファイルをserver_rootにコピーしてください。
先頭に/
がない場合、AuthUserFile
に提供されるパスはServerRoot
を基準にしています。プライベートディレクトリにはServerRootからの相対パスがあるので、それを指定するだけです-与えられた
ServerRoot /var/www
とprovateディレクトリ
/var/www/some/path/private
その後
AuthUserFile some/path/private
動作するはずです。