Я пытаюсь настроить веб-сервер Apache для работы следующим образом:
if /specialdir/ -> no password check, no hostname check, no https redirect.
if 192.168.1.1 url -> redirect to https://hostname, do password check
if http://hostname/ -> redirect to https://hostname/, do password check
if '/' is requested -> redirect to https://hostname/entry/, do password check
Итак, в итоге все URL-адреса, кроме specialdir
, всегда должны посещаться через https://hostname
с обязательной аутентификацией.
В настоящее время я использую следующую конфигурацию в httpd.conf
, и все работает, за исключением того, что аутентификация выполняется дважды: один раз для подключения http и второй раз для подключения https. Каким-то образом моя конфигурация не выполняет перенаправление в первую очередь.
(да, я знаю, что использование Location
считается неидеальным, однако, кажется, что этот способ проще применять к одной и той же конфигурации для всех URL / каталогов (поскольку у меня есть только одно исключение))
<Location />
## authentication
AuthBasicProvider file ldap
AuthUserFile /etc/apache2/.htpasswd
AuthGroupFile /dev/null
AuthType Basic
# allow alternative authentication, here "file"
AuthzLDAPAuthoritative off
AuthName "Login required"
AuthLDAPURL "ldap://xxx?sAMAccountName" NONE
AuthLDAPBindDN "xxx"
AuthLDAPBindPassword xxx
require valid-user
## redirects
Options +FollowSymLinks
RewriteEngine On
# in case /specialdir/ is requested - go there right away and
# skip remaining checks.
RewriteCond %{REQUEST_URI} "/specialdir/"
RewriteRule (.*) $1 [L]
# someone trying to access the host by IP - redirect to hostname.com
RewriteCond %{HTTP_HOST} !^hostname.com [NC]
RewriteRule (.*) https://hostname.com%{REQUEST_URI} [R=301,L]
# https is off? redirect to https (because we are transmitting passwords)
RewriteCond %{HTTPS} off
RewriteRule (.*) https://hostname.com%{REQUEST_URI}
# no directory requested - go to 'entry'.
RedirectMatch ^/$ /entry/
</Location>
## allow unrestricted access to the following resources
<Directory /var/www/specialdir>
# All access controls and authentication are disabled
# in this directory
Satisfy Any
Allow from all
</Directory>