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