Добавьте несколько белых IP-адресов для обхода защищенного каталога htaccess
В настоящее время я защищаю своего администратора с помощью всплывающего окна htaccess, но я добавил белый список для своего собственного IP-адреса. Это работает отлично:
<If "%{REMOTE_ADDR} != '84.x.x.x'">
AuthGroupFile /dev/null
AuthType Basic
AuthUserFile /home/x/domains/my.x.com/.htpasswd/public_html/x/.htpasswd
AuthName "no public access"
require valid-user
ErrorDocument 401 "Unauthorized Access"
</If>
Теперь есть еще два места, которые я хотел бы добавить в белый список. К сожалению, я не смог выяснить синтаксис для добавления нескольких IP-адресов. Кажется, что в большинстве примеров используется более старый синтаксис без операторов if.
Кто-нибудь знает, как я переписать этот код, чтобы включить 2 дополнительных IP-адреса?
4 ответа
Я нашел альтернативное решение:
Order deny,allow
Deny from all
AuthName "no public access"
AuthUserFile /home/x/domains/my.x.com/.htpasswd/public_html/test/.htpasswd
AuthType Basic
Require valid-user
ErrorDocument 401 "Unauthorized Access"
#location1
Allow from 84.x.x.x
#location2
Allow from 185.x.x.x
Satisfy Any
Он использует совершенно другой синтаксис, поэтому это не 100% ответ на мой оригинальный вопрос. Однако он допускает внесение нескольких IP-адресов в белый список в защищенном паролем каталоге.
Это может быть реализовано с использованием сравнения на основе регулярных выражений:
<If "! %{REMOTE_ADDR} =~ m#(85.x.x.x)|(86.x.x.x)#">
Это позволяет сравнить адрес с шаблоном, который предлагает огромную гибкость.
Извините, новый аккаунт / Не могу добавить комментарий к правильному ответу.
В предыдущих ответах была допущена только одна ошибка. Так как Magistar хочет захватить, если это не те IP, ответ Фелисьена должен быть (Примечание!):
# Check a HTTP header for a list of values
<If "! %{HTTP:REMOTE_ADDR} in { '84.x.x.x', '85.x.x.x' } ">
Header set matched true
</If>
Кроме того, если вы хотите использовать одиночные выражения, вам нужно, чтобы &&(AND) не ||(OR):
<If "!(%{REMOTE_ADDR} = '84.x.x.x' && %{REMOTE_ADDR} = '85.x.x.x')">
Причина, по которой это может не сработать, заключается в том, что все выражение должно быть между одной большой двойной кавычкой, заблокированной.
Я нахожу ответ Фелисьена более аккуратным, чем несколько выражений.
Я думаю, что вы хотите использовать оператор "IN": Вы можете найти пример здесь:
https://httpd.apache.org/docs/2.4/en/expr.html
# Check a HTTP header for a list of values
<If "%{HTTP:X-example-header} in { 'foo', 'bar', 'baz' }">
Header set matched true
</If>