У меня есть несколько промежуточных сайтов 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[12139 provided.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>
Vhost сайта 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>
my apache.conf
<Directory /var/www/staging>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
</Directory>
Я подозреваю, что я необходимо изменить vhost для использования аутентификации, однако, поскольку у меня довольно много сайтов в этом каталоге, я бы предпочел, чтобы был глобальный rul, который просто запускается для любых файлов, помещенных в этот подкаталог, независимо от того, что говорит другая конфигурация. Возможно ли это?
Проблема действительно в том, что вы используете файлы .htaccess
, хотя у вас есть доступ к основным файлам конфигурации Apache.
Как правило, файлы .htaccess следует использовать только в том случае, если у вас нет доступа к основному файлу конфигурации сервера. Существует, например, распространенное заблуждение, что аутентификация пользователя всегда должна выполняться в файлах .htaccess, а в последнее время возникло еще одно заблуждение, что директивы mod_rewrite должны входить в файлы .htaccess. Это просто не тот случай. https://httpd.apache.org/docs/2.4/howto/htaccess.html
В этом случае неожиданное поведение файла .htaccess
в / var / www / staging
не применяется, потому что, насколько мне известно, Apache будет искать и применять только любые файлы .htaccess
, находящиеся в каталоге DocumentRoot и ниже. Т.е. только / var / www / staging / some-wp-site
и их подкаталоги.
Я вполне уверен, что если вы создадите блок каталога в своем основном httpd.conf, чтобы требовать аутентификации на / var / www / staging
, он также будет применяться ко всем подкаталогам и каждому виртуальному хосту с DocumentRoot
там.
Проблема в том, что директива Требовать все предоставленные
в контейнере
внутри вашего
переопределяет директивы аутентификации в файле .htaccess
в родительском каталоге . Его следует удалить и вместо этого разрешить доступ к каталогу / var / www
(если у вас есть сайты за пределами «промежуточной» области) и ограничить доступ к / var / www / staging
], как вы это делаете, хотя было бы предпочтительнее сделать это в конфигурации сервера, а не .htaccess
.
AllowOverride All
Кроме того, никогда не следует устанавливать AllowOverride All
для корневого каталога. Документы Apache специально предупреждают, чтобы не выполняли этого:
По соображениям безопасности и производительности не устанавливайте
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
(и Индексы
), если только вы не используете их специально. В противном случае MultiViews
, вероятно, только в какой-то момент в будущем конфликтуют с mod_rewrite.