특정 URL을 네트워크 외부에서 특정 IP 주소로만 사용할 수 있도록 제한하려고합니다. 외부 사용자가 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>
추신 : / secret URL은 사실상 가상 URL이며 드라이브에 실제로 존재하지 않습니다.
답변
사용 Order
, Deny
그리고 allow
당신의 가상 호스트 또는 위치에 대한 액세스 권한이있는 사용자를 지정할 수 있습니다.
<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 오류를 유발하므로 쉽게 평가할 수 있기 때문에 이것은 훨씬 더 일반적입니다.
나는 아파치로 이것을 한 적이 없지만 nginx와 함께이 전략을 사용합니다. 아파치의 경우 다음과 같이해야합니다.
ErrorDocument 403 http://homepage.example.com
사용자 정의 오류 문서는 전역, 가상 호스트 또는 디렉토리 컨텍스트에서 사용될 수있는 ErrorDocument 지시문을 사용하여 구성됩니다. AllowOverride가 FileInfo로 설정되어 있으면 .htaccess 파일에서 사용될 수 있습니다. (아파치 문서에서)
답변
주문, 거부 및 허용 옵션이 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 액세스 제어 문서에 있습니다.
귀하의 질문과 관련하여 (주석을 추가 할 요점이 없기 때문에 내 자신의 편집) URL을 URL 경로로 설정하여 ErrorDocument를 간단하게 설정할 수 있어야합니다.
<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의 경우 <RequireAny>를 사용할 수 있습니다. 당신은 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>
아파치 문서 https://httpd.apache.org/docs/2.4/mod/mod_authz_core.html#requireany