Apache 2.4 ограничивает URL определенным дюйм/с

Я пытаюсь ограничить определенный 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 и не существует физически на диске.

13
задан 28 September 2015 в 13:01
3 ответа

Используйте Порядок , Запретить и разрешить указать, кто имеет доступ к вашему виртуальному хосту или местоположению.

<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)

4
ответ дан 2 December 2019 в 21:20

Параметры 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>

Надеюсь, это поможет!

21
ответ дан 2 December 2019 в 21:20

Для Apache 2.4 вы можете использовать . Вы можете сделать это в файле vhost или .htaccess ....

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

2
ответ дан 2 December 2019 в 21:20

Теги

Похожие вопросы