.реврайт /.htpasswd обход, если на определенный IP-адрес

возможно ли иметь .реврайт/.настройка управления доступом htpasswd для данного каталога, но если они с определенного IP-адреса, обойти аутентификацию логин / пароль?

Я знаю, что вы можете сделать что-то подобное в .файл htaccess:

order deny,allow
deny from all
allow from 000.000.000.000

но если вы добавите что-то в этом роде:

AuthType Basic
AuthName "restricted area"
AuthUserFile /path/to/.htpasswd
require valid-user

затем он запрашивает пароль. Есть ли способ выполнить настройку типа if / else или какое-либо другое решение, чтобы пользователи как данный IP (или набор IPs) не запрашивается пароль, но все остальные это делают?

6 ответов


для версии 2.2.X вы можете использовать следующие...

AuthUserFile /var/www/mysite/.htpasswd
AuthName "Please Log In"
AuthType Basic
require valid-user
Order allow,deny
Allow from xxx.xxx.xxx.xxx
satisfy any

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

дальнейшее объяснение специфики, можно найти по адресу:http://httpd.apache.org/docs/2.2/howto/auth.html


Если вы используете Apache >=2.4, это будет что-то вроде этого:

<If "%{REMOTE_ADDR} != '127.0.0.1'">
  AuthType Basic
  AuthName "restricted area"
  AuthUserFile /path/to/.htpasswd
  require valid-user
</If>

для получения дополнительной информации взгляните на docs.


Я запускаю Apache / 2.2.16 (Debian), и у меня была аналогичная проблема, я решил ее так:

(Это можно запустить как в an .файл htaccess или непосредственно в virtualhost под <Location/>)

Order deny,allow
Deny from all
AuthType Basic
AuthUserFile /home/somesite/.htpasswd
AuthName "No entry, unless"
Require Valid-user
Allow from x.x.x.x
Allow from x.x.x.x
Satisfy Any

я разрешил вход без пароля с двух разных ip, а остальные должны ввести пароль для входа.


Если вы используете apache >=2.4, и вы хотите разрешить набор IP, как задано в начальном вопросе, вы можете сделать это так:

   <If "-R '192.168.0.0/24'">
            Require all granted
    </If>
    <ElseIf "-R '192.168.1.0/24'">
            Require all granted
    </ElseIf>
    <Else>
            AuthType Basic
            AuthName "restricted area"
            AuthUserFile /etc/apache2/.htpasswd
            require valid-user
    </Else>

в дополнение к ответу j5Dev:

# Interne IP-Adressen
SetEnvIf Remote_Addr "^127\.0\.0\.1$" IsIntern
SetEnvIf Remote_Addr "^192\.168" IsIntern
# .. add more IP addresses or ranges here

# Authentication, wenn nicht intern
AuthUserFile /path/to/.htpasswd
AuthName "restricted area"
AuthType Basic
require valid-user
Order allow,deny
Allow from env=IsIntern
satisfy any

Apache 2.4 совместимость:

AuthType Basic
AuthUserFile /www/.htpasswd
AuthName "Protected Area"

<RequireAny>
    Require ip 1.2.3.4
    Require valid-user
</RequireAny>

см. руководство по миграции обновление до 2,4 с 2,2 для получения дополнительных примеров.