.htaccess -Исключить папку из базовой защиты аутентификации

У меня есть веб-сайт, на который никто не может войти, не введя базовые учетные данные для аутентификации.

Однако мне нужно, чтобы медиа-папка была доступна всем, потому что мы используем стороннее расширение, которое создает PDF-файлы, и мы можем полностью протестировать их только в том случае, если медиа-файл доступен.

Медиа-папка находится по адресу /var/www/company/pub/media.

Домен(www.example.com)указывает на /var/www/company/pub, поэтому папка pub является точкой входа.

Это моя попытка.htaccess.(/var/www/company/.htaccess):

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/pub/
RewriteCond %{REQUEST_URI} !^/setup/
RewriteCond %{REQUEST_URI} !^/update/
RewriteCond %{REQUEST_URI} !^/dev/
RewriteRule.* /pub/$0 [L]
DirectoryIndex index.php

AuthType Basic
AuthName "Protected"
AuthUserFile "/var/www/company/.htpasswd"

# Exclude media folder from basic auth
SetEnvIf Request_URI "^/media/*" media

Order allow,deny
Require valid-user
Allow from env=media
Deny from env=!media
Satisfy any

Но если я попытаюсь вызвать http://www.example.com/media/someimage.jpg, я все равно получу приглашение для входа в систему.

Среда:

Apache 2.4.41 (Ubuntu)

3
задан 12 October 2021 в 13:06
2 ответа
# Exclude media folder from basic auth
SetEnvIf Request_URI "^/media/*" media

Order allow,deny
Require valid-user
Allow from env=media
Deny from env=!media
Satisfy any

Это сработало бы, за исключением того, что регулярное выражение в директиве SetEnvIfневерно, поэтому env var mediaне устанавливается при запросе /media/someimage.jpg. Вам не хватает точки перед квантификатором *, т.е. ^/media/.*. Однако вы можете просто удалить завершающий *вообще, т.е. ^/media/, который фактически такой же (и более эффективный).

Директива Deny from env=!mediaявляется лишней.

Итак, следующее должно работать:

# Exclude media folder from basic auth
SetEnvIf Request_URI "^/media/" media

Require valid-user
 
Order allow,deny
Allow from env=media
Satisfy Any

ОДНАКО, здесь используются устаревшие директивы Apache 2.2. В Apache 2.4 вместо этого вы можете сделать следующее:

# Exclude media folder from basic auth
SetEnvIf Request_URI "^/media/" media

Require valid-user
Require env media

Контейнер по умолчанию — это <RequireAny>-, поэтому вам не нужно включать это. Хотя вы можете указать явно, если хотите,:

<RequireAny>
    Require valid-user
    Require env media
</RequireAny>

В качестве альтернативы, вы можете окружить весь блок авторизации выражением <If>. Например,:

# Password protect everything except the "/media/" subdirectory
<If "%{REQUEST_URI} !~ m#^/media/#">
    AuthType Basic
    AuthName "Protected"
    AuthUserFile "/var/www/company/.htpasswd"
    Require valid-user
</If>

Оператор !~представляет собой инвертированное совпадение с регулярным выражением.

1
ответ дан 13 October 2021 в 15:19

Поместите файл .htaccess в папку мультимедиа с AuthType None.

AuthType None
Require all granted
5
ответ дан 12 October 2021 в 13:24

Теги

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