Добавьте несколько белых 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>
Другие вопросы по тегам