Я пытаюсь ограничить определенный URL, чтобы быть доступным вне сети только к определенным IP-адресам. Когда пользователь вне пытается получить доступ к тому URL, а не из списка дюйм/с он должен быть перенаправлен к домашней странице.
Это - то, что я попробовал до сих пор без любой удачи. Последняя часть это перенаправляет всех к домашней странице независимо от IP.
<Location "/secret">
# <If "%{REMOTE_ADDR} != -ipmatch '123.123.123.123/255.255.255.255'">
# Redirect 303 "/secret" /
# </If>
RewriteCond "%{REMOTE_ADDR}" "!123\.123\.123\.123"
RewriteRule .* / [R,L]
LogLevel debug rewrite:trace6
</Location>
PS: / секретный URL является на самом деле виртуальным URL и не существует физически на диске.
Используйте Порядок
, Запретить
и разрешить
указать, кто имеет доступ к вашему виртуальному хосту или местоположению.
<VirtualHost *:80>
ServerName example.net
DocumentRoot /docroot
<Directory "/docroot">
Order Deny,Allow
Deny from all
Allow from 10.10.10.10
Allow from 10.10.11.0/24
</Directory>
</VirtualHost>
Когда это доходит до перенаправления, подумайте о настраиваемой странице ошибок . Это гораздо более общий подход, потому что каждый несанкционированный доступ должен вызывать ошибку 403 и, таким образом, может быть легко оценен.
Я никогда не делал этого с apache, но использую эту стратегию с nginx. Для apache должно выполняться что-то подобное:
ErrorDocument 403 http://homepage.example.com
Пользовательские документы об ошибках настраиваются с помощью директивы ErrorDocument, которая может использоваться в глобальном контексте, контексте виртуального хоста или каталога. Его можно использовать в файлах .htaccess, если для AllowOverride задано значение FileInfo. (из документации apache)
Параметры Order, Deny и Allow были заменены в Apache 2.4 на
<Directory /var/www/mysite.com/htdocs/public>
Require all granted
</Directory>
. Вы можете явно ограничить адреса, используя следующее:
<Directory /var/www/mysite.com/htdocs/public>
Require all granted
Require not ip 192.168.0.1
</Directory>
Верно и обратное. , чтобы ограничить все и разрешить только подмножество, используйте следующее:
<Directory /var/www/mysite.com/htdocs/public>
Require host example.com
Require ip 192.168.0.1
</Directory>
Дополнительная информация доступна в документации по управлению доступом Apache 2.4.
Что касается вашего вопроса (отредактировал мой собственный из-за отсутствия указывает на добавление комментария), вы сможете просто установить ErrorDocument с индексом, установленным как URL-путь:
<Directory /var/www/mysite.com/htdocs/public>
Require host example.com
Require ip 192.168.0.1
ErrorDocument 401 /index.html
</Directory>
Надеюсь, это поможет!
Для Apache 2.4 вы можете использовать
SetEnvIF IP xxx.xxx.xxx.xxx AllowThisIP # Or X-Real-IP
SetEnvIF IP yyy.yyy.yyy.yyy AllowThisIP
<RequireAny>
Require env AllowThisIP
Require host example.com
</RequireAny>
Документы Apache https://httpd.apache.org/docs/2.4/mod/mod_authz_core.html#requireany