Назад | Перейти на главную страницу

Базовая аутентификация Apache для определенного URL

У меня есть сайт в разработке, который я хочу изменить (перевести с французского на английский). Измененная деталь будет помещена в domain.com/en Местоположение URL-адреса, и я хочу защитить только эту часть с помощью базовой HTTP-аутентификации во время изменений.

Я хотел бы вести себя так же, как если бы у меня en каталог в моей корневой папке и .htaccess файл в этом каталоге, чтобы реализовать базовую аутентификацию. К сожалению, я не могу этого сделать, потому что сайт работает на Wordpress и использует правила перезаписи, поэтому я не могу создать en каталог без обхода Wordpress.

Какие директивы я должен поместить в .htaccess в корневом каталоге, чтобы включить базовую аутентификацию только для /en расположение ? Я пробовал использовать <Location /en></Location> block, но он вызывает ошибку 500, поэтому я полагаю, что этот блок поддерживается только в файлах конфигурации apache.

@Gregg_Leventhal дал мне решение, используя переменные среды. Но логика, которую я использую, в точности обратна той, что использовалась в его ответе. Для полноты, вот код для запроса аутентификации только для URL /en :

#set an environtment variable "auth" if the request starts with "/en"
SetEnvIf Request_URI ^/en auth=1

AuthName "Please login to access english part"
AuthType Basic
AuthUserFile "/path/to/my/.htpasswd"

# first, allow everybody
Order Allow,Deny
Satisfy any
Allow from all
Require valid-user
# then, deny only if required
Deny from env=auth

Я вижу ... Приведенный ниже код отключит аутентификацию только для каталога обратных вызовов, возможно, вы можете изменить эту логику, чтобы она включала аутентификацию только в желаемом каталоге или отключила аутентификацию для всех каталогов, имя которых не соответствует тому, которое вы хотите защищать.

# set an environment variable "noauth" if the request starts with "/callbacks/"
SetEnvIf Request_URI ^/callbacks/ noauth=1

# the auth block
AuthName "Please login."
AuthGroupFile /dev/null
AuthType Basic
AuthUserFile /xxx/.htpasswd

#Here is where we allow/deny
Order Deny,Allow
Satisfy any
Deny from all
Require valid-user
Allow from env=noauth

Приведенные выше ответы подходят для версий Apache до 2.4. Вот обновление для Apache 2.4 и выше, когда некоторые директивы были изменены. В этом фрагменте файла конфигурации базовая аутентификация HTTP применяется только к URI «/ members». «scs» относится к пользователю, указанному в файле «/home/website/.htpasswd».

<Directory "/home/website/www">
    AuthType Basic
    AuthName "Members' restricted area"
    AuthBasicProvider file
    AuthUserFile "/home/website/.htpasswd"

    <RequireAny>
        Require expr %{REQUEST_URI} !~ m#^\/members#
        Require user scs
    </RequireAny>
</Directory>