いくつかのWordPressステージングサイトがステージングディレクトリに配置されています。ステージングディレクトリには、.htaccessと.htpasswdがあります。
.htaccess:
AuthType Basic
AuthName "restricted area"
AuthUserFile /var/www/staging/.htpasswd
require valid-user
.htpasswd
username:PdadsaasdMehzdsadwad
このディレクトリにファイルを配置すると、認証プロセスが適切にトリガーされますが、サブディレクトリにWordPressサイトを配置すると、認証が表示されません。
例WPサイト:/ var/www/staging/some-wp-site
.htaccess
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
WPサイト仮想ホスト:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName somewpsite.com
ServerAlias somewpsite.com
DocumentRoot /var/www/staging/some-wp-site
<Directory />
AllowOverride All
</Directory>
<Directory /var/www/staging/some-wp-site>
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Require all granted
</Directory>
</VirtualHost>
私のApache.conf
<Directory /var/www/staging>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
</Directory>
認証を使用するために仮想ホストを変更する必要があると思いますが、そのディレクトリにはかなりの数のサイトがあるので、別の構成が何を言っているかに関係なく、このサブディレクトリに配置されたファイルを単にトリガーするgloblルールがあればいいと思います。これは可能ですか?
問題は、メインのApache構成ファイルにアクセスできるにもかかわらず、.htaccess
ファイルを使用していることです。
一般に、メインサーバー構成ファイルにアクセスできない場合にのみ.htaccessファイルを使用する必要があります。たとえば、ユーザー認証は常に.htaccessファイルで行う必要があるという一般的な誤解があり、最近では、mod_rewriteディレクティブを.htaccessファイルに含める必要があるという別の誤解があります。これは単にそうではありません。 https://httpd.Apache.org/docs/2.4/howto/htaccess.html
この場合、.htaccess
の/var/www/staging
ファイルが適用されないという予期しない動作が発生します。これは、私が知る限り、ApacheはDocumentRootで見つかった.htaccess
ファイルのみを検索して適用するためです。ディレクトリ以下。つまり/var/www/staging/some-wp-site
とそのサブディレクトリのみ。
メインのhttpd.confにディレクトリブロックを作成して/var/www/staging
での認証を要求すると、すべてのサブディレクトリと、そこにDocumentRoot
があるすべての仮想ホストにも適用されると確信しています。
問題は、Require all granted
内の<Directory>
コンテナ内の<VirtualHost>
ディレクティブが、parentディレクトリ内の.htaccess
ファイル内の認証ディレクティブをオーバーライドしていることです。 。これを削除し、代わりに/var/www
ディレクトリへのアクセスを許可し(「ステージング」領域外のサイトがある場合)、実行しているように/var/www/staging
サブディレクトリへのアクセスを制限する必要があります。 .htaccess
ではなく、サーバー構成でこれを行うことをお勧めします。
<Directory /> AllowOverride All </Directory>
また、ルートディレクトリにAllowOverride All
を設定しないでください。 Apacheドキュメントは特に警告します これを行う:
セキュリティとパフォーマンス上の理由から、
<Directory "/">
ブロックでAllowOverride
をNone以外に設定しないでください。
したがって、/var/www/staging/.htaccess
ファイルを削除し、vHostファイルとApache.conf
ファイルを次のように作り直します。
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName somewpsite.com
ServerAlias somewpsite.com
DocumentRoot /var/www/staging/some-wp-site
<Directory /var/www/staging/some-wp-site>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
</Directory>
</VirtualHost>
Apache.conf
:
<Directory />
AllowOverride None
Require all denied
</Directory>
<Directory /var/www>
Require all granted
</Directory>
<Directory /var/www/staging>
Options Indexes FollowSymLinks MultiViews
AuthType Basic
AuthName "restricted area"
AuthUserFile /var/www/staging/.htpasswd
Require valid-user
</Directory>
特にこれらを使用していない限り、MultiViews
(およびIndexes
)も無効にすることをお勧めします。そうしないと、MultiViews
はおそらく将来のある時点でmod_rewriteと競合することになります。