<Directory> 구문에서 접근 제어하는 간단한 예시입니다.
1. <Directory> 의 특정한 문자열로 제어하고 싶을 경우
2. 해당 경로 매칭되는 응답 코드에 맞춘 파킹 페이지로 이동
순서
Directory 섹션의 순서는 다음과 같다.
동시에 존재한다면 해당 순서대로 실행되는 점을 유의하자
1. <Directory>
2. <DirectoryMatch>
3. <Files>와 <FilesMatch>
4. <Location>
< 기본 상태 >
# Document 를 /home/web 으로 지정한 VHOST 이다.
<Directory> 의 All grants 설정에 따라 기본 페이지가 정상 출력된다.
<Directory /home/web>
AllowOverride All
Require all granted
</Directory>
<VirtualHost *:80>
ServerAdmin admin-bmi
DocumentRoot "/home/web"
ServerName bmitest.co.kr
ServerAlias www.bmitest.co.kr
ErrorLog "/home/web/logs/bmitest.co.kr-error_log"
CustomLog "/home/web/logs/bmitest.co.kr" common
</VirtualHost>
# 기본 페이지 정상 출력
[root@CentOS7-CT01 conf]# curl http://localhost/
BMI!
# 하지만 /home/web/logs/accesstest 같은 File 까지 그대로 보여버리는게 문제
[root@CentOS7-CT01 conf]# curl http://localhost/logs/accesstest
oops. This Page must No view!
접근 제어 설정
# Directory 를 개별 구분하는 것보다 DirectoryMatch 를 하위로 넣어보자
<Directory "/home/web/">
AllowOverride All
Require all granted
</Directory>
<Directorymatch "^/.*/logs/"> # DocumentRoot/Logs 경로 금지
Order deny,allow
Deny from all
</Directorymatch>
<VirtualHost *:80>
ServerAdmin admin-bmi
DocumentRoot "/home/web"
ServerName bmitest.co.kr
ServerAlias www.bmitest.co.kr
ErrorLog "/home/web/logs/bmitest.co.kr-error_log"
CustomLog "/home/web/logs/bmitest.co.kr" common
</VirtualHost>
# 이제 해당 경로 접근 시도시 403 이 정상적으로 뜬다
[root@CentOS7-CT01 conf]# curl http://localhost/logs/accesstest
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access this resource.</p>
</body></html>
# 포워딩 페이지를 기재하여 원하는 문구나 페이지로 이동 할 수도 있다
<Directory> 바깥에 별도 추가. 문자 또는 URL 입력 가능하다.
ErrorDocument 403 "No No NO!"
# 테스트
[root@CentOS7-CT01 conf]# curl http://localhost/logs/accesstest
No No NO!