Apache .htpasswd не применяется к подкаталогам

У меня есть несколько промежуточных сайтов 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, который просто запускается для любых файлов, помещенных в этот подкаталог, независимо от того, что говорит другая конфигурация. Возможно ли это?

2
задан 23 April 2018 в 03:04
2 ответа

Проблема действительно в том, что вы используете файлы .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 там.

1
ответ дан 3 December 2019 в 11:26

Проблема в том, что директива Требовать все предоставленные в контейнере внутри вашего переопределяет директивы аутентификации в файле .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.

1
ответ дан 3 December 2019 в 11:26

Теги

Похожие вопросы