web-dev-qa-db-ja.com

仮想ホストルートからのAuthUserFileパス?

このフォルダ/ファイル構造を考えると:

private/.htpasswd
public/.htaccess

...ここで、publicはApacheの仮想ホストのルートフォルダーであり、privateはその兄弟フォルダーです。

.htaccessファイルにAuthUserFileの相対パスを定義して、/private/.htpasswdにアクセスできるようにするにはどうすればよいですか。

私はもう試した:

AuthType Basic 
AuthUserFile ../private/.htpasswd
require valid-user

ただし、仮想ホストルートではなく、ServerRootに関連してファイルを検索しようとするため、これは機能しません。

本番サーバー(共有ホスト)の構成ファイルにアクセスできず、テストと本番ファイルシステムの構造が一致しないため、絶対パスを定義したくありません。

これらの条件を考慮して、私が望むことを達成することはまだ可能ですか?

3
Decent Dabbler

テストシステムでシンボリックリンクを使用できます。例:/srv/www/vhost/private/.htpasswd -> /var/www/vhost/private/.htpasswd。最初のパスは、実稼働サーバーと同じである必要があります。そうすれば、両方のサーバーで同じパスを使用できるようになります。 Options FollowSymLinksこれには必要な場合があります。 ServerRootに関連しない構成ファイルを含める方法がわかりません。

1
Selivanov Pavel

Selivanov Pavelによって投稿されたシンボリックリンクソリューションが機能しない場合は、ALlowOverride -AuthConfigを使用して.htaccessのAuth *ディレクティブを無効にし(または.htaccessを完全に無効にして)、ローカルマシンのApacheconfにのみAuth構成を移動できます。

1
xofer

例を見てみましょう。

アプリケーションは/ 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にコピーしてください。

1
Sild

先頭に/がない場合、AuthUserFileに提供されるパスはServerRootを基準にしています。プライベートディレクトリにはServerRootからの相対パスがあるので、それを指定するだけです-与えられた

ServerRoot /var/www

とprovateディレクトリ

/var/www/some/path/private

その後

AuthUserFile some/path/private

動作するはずです。

0
user9517