|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head>
|
|
Packit |
90a5c9 |
<meta content="text/html; charset=EUC-KR" http-equiv="Content-Type" />
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit |
90a5c9 |
This file is generated from xml source: DO NOT EDIT
|
|
Packit |
90a5c9 |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit |
90a5c9 |
-->
|
|
Packit |
90a5c9 |
<title>아파치 투토리얼: Server Side Includes 소개 - Apache HTTP Server Version 2.4</title>
|
|
Packit |
90a5c9 |
<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
|
|
Packit |
90a5c9 |
<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
|
|
Packit |
90a5c9 |
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" />
|
|
Packit |
90a5c9 |
<script src="../style/scripts/prettify.min.js" type="text/javascript">
|
|
Packit |
90a5c9 |
</script>
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
<link href="../images/favicon.ico" rel="shortcut icon" /></head>
|
|
Packit |
90a5c9 |
<body id="manual-page">
|
|
Packit |
90a5c9 |
모듈 | 지시어들 | FAQ | 용어 | 사이트맵
|
|
Packit |
90a5c9 |
Apache HTTP Server Version 2.4
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
Apache > HTTP Server > Documentation > Version 2.4 > How-To / Tutorials아파치 투토리얼: Server Side Includes 소개
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
가능한 언어: en |
|
|
Packit |
90a5c9 |
es |
|
|
Packit |
90a5c9 |
fr |
|
|
Packit |
90a5c9 |
ja |
|
|
Packit |
90a5c9 |
ko
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
이 문서는 최신판 번역이 아닙니다.
|
|
Packit |
90a5c9 |
최근에 변경된 내용은 영어 문서를 참고하세요.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
Server-side includes를 사용하여 HTML 문서에 동적인 내용을
|
|
Packit |
90a5c9 |
추가할 수 있다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
SSI가 무엇인가?
|
|
Packit |
90a5c9 |
SSI가 가능하도록 서버 설정하기
|
|
Packit |
90a5c9 |
기본 SSI 지시어
|
|
Packit |
90a5c9 |
추가 예제
|
|
Packit |
90a5c9 |
이외에 설정할 수 있는 것은?
|
|
Packit |
90a5c9 |
명령어 실행하기
|
|
Packit |
90a5c9 |
고급 SSI 기법
|
|
Packit |
90a5c9 |
결론
|
|
Packit |
90a5c9 |
참고
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
이 글은 보통 SSI라고 부르는 Server Side Includes를 설명한다.
|
|
Packit |
90a5c9 |
SSI가 가능하도록 서버를 설정하는 방법과 HTML 페이지에 동적인
|
|
Packit |
90a5c9 |
내용을 추가하는 기본적인 SSI 사용법을 소개한다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
이 글의 뒷부분은 SSI 지시어 조건문과 같은 고급기법을
|
|
Packit |
90a5c9 |
설명한다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
SSI (Server Side Includes)는 HTML 페이지에 사용하는 지시어로,
|
|
Packit |
90a5c9 |
페이지를 서비스할때 서버가 처리한다. SSI를 사용하면 CGI
|
|
Packit |
90a5c9 |
프로그램이나 다른 동적인 기술로 페이지 전체를 만들어서
|
|
Packit |
90a5c9 |
서비스하지 않고도 HTML 페이지에 동적으로 생성한 내용을 추가할
|
|
Packit |
90a5c9 |
수 있다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
SSI를 사용할지 아니면 프로그램으로 페이지 전체를 생성할지
|
|
Packit |
90a5c9 |
결정은 페이지에서 정적인 부분이 많은지와 페이지를 서비스할
|
|
Packit |
90a5c9 |
때마다 어느정도를 다시 계산해야할지에 달렸다. SSI는 현재
|
|
Packit |
90a5c9 |
시간과 같이 적은 정보를 추가하는데 좋다. 그러나 페이지를
|
|
Packit |
90a5c9 |
서비스할때 페이지의 대부분을 생성해야 한다면 다른 방법을
|
|
Packit |
90a5c9 |
찾아봐야 한다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
서버가 SSI를 처리하려면 httpd.conf 파일이나
|
|
Packit |
90a5c9 |
.htaccess 파일에서 다음 지시어를 사용해야 한다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
Options +Includes
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
그러면 아파치는 파일에서 SSI 지시어를 처리한다. 설정에는
|
|
Packit |
90a5c9 |
보통 여러 Options 지시어가
|
|
Packit |
90a5c9 |
있고, 이 지시어들은 서로 덮어써서 무효로 만들다. 그래서
|
|
Packit |
90a5c9 |
지시어를 맨마지막에 처리하기위해 보통 SSI를 원하는 특정
|
|
Packit |
90a5c9 |
디렉토리에서 Options 를 사용한다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
모든 파일에서 SSI 지시어를 처리하는 것은 아니다. 아파치에게
|
|
Packit |
90a5c9 |
어떤 파일을 처리할지 알려줘야 한다. 두가지 방법이 있다.
|
|
Packit |
90a5c9 |
하나는 다음과 같은 지시어로 .shtml 과 같은 특정
|
|
Packit |
90a5c9 |
파일 확장자를 가진 파일을 처리하는 방법이다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
AddType text/html .shtml
|
|
Packit |
90a5c9 |
AddOutputFilter INCLUDES .shtml
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
이 방법의 단점은 이미 있는 페이지에 SSI 지시어를 추가하는
|
|
Packit |
90a5c9 |
경우 SSI 지시어를 처리하기위해 .shtml 확장자를
|
|
Packit |
90a5c9 |
부여하기때문에 파일명과 이 페이지의 모든 링크를 변경해야
|
|
Packit |
90a5c9 |
하는 점이다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
다른 방법은 XBitHack
|
|
Packit |
90a5c9 |
지시어를 사용하는 방법이다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
XBitHack on
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
XBitHack 는
|
|
Packit |
90a5c9 |
실행권한이 있는 파일에서 SSI 지시어를 처리한다. 그래서 이미
|
|
Packit |
90a5c9 |
있는 페이지에 SSI 지시어를 추가한다면 파일명을 변경하지
|
|
Packit |
90a5c9 |
않고 chmod 로 파일에 실행권한을 주면 된다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
chmod +x pagename.html
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
하지 말아야 할 것 하나. 가끔 .shtml 파일명에
|
|
Packit |
90a5c9 |
골치를 앓지말고 모든 .html 파일을 SSI 처리하라고
|
|
Packit |
90a5c9 |
충고하는 사람이 있다. 이 사람들은 아마도 XBitHack 에 대해 모르는
|
|
Packit |
90a5c9 |
것 같다. 명심할 점은 이렇게 하면 아파치는 파일에 SSI 지시어가
|
|
Packit |
90a5c9 |
없더라도 클라이언트로 보내는 모든 파일을 살펴봐야 한다는
|
|
Packit |
90a5c9 |
것이다. 성능이 매우 느려질 수 있으며, 좋은 생각이 아니다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
물론 윈도우즈에서는 실행권한이란 것이 없기때문에 후자를
|
|
Packit |
90a5c9 |
사용할 수 없다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
내용이 동적이여서 계산하기 어렵기때문에 아파치 기본 설정은
|
|
Packit |
90a5c9 |
SSI 페이지의 최근수정일과 content length HTTP 헤더를 보내지
|
|
Packit |
90a5c9 |
않는다. 그래서 문서를 캐쉬하지 못하고 클라이언트가 느끼는
|
|
Packit |
90a5c9 |
성능이 떨어진다. 두가지 해결방법이 있다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
XBitHack Full 설정은 사용한다. 그러면
|
|
Packit |
90a5c9 |
아파치는 포함하는(include) 파일들의 수정일은 무시한체
|
|
Packit |
90a5c9 |
원래 요청한 파일의 날짜만 보고 최근수정일을 알아낸다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
mod_expires 에 있는 지시어를 사용하여
|
|
Packit |
90a5c9 |
파일에 직접 만기일을 설정하면 브라우저와 프록시가 문서를
|
|
Packit |
90a5c9 |
캐쉬할 수 있다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
SSI 지시어의 사용법은 다음과 같다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
<!--#element attribute=value attribute=value ... -->
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
HTML 주석같이 생겼기때문에 SSI 기능을 가동하지 않아도
|
|
Packit |
90a5c9 |
HTML 소스에는 나오지만 브라우저는 무시한다. SSI를 올바로
|
|
Packit |
90a5c9 |
설정하면 지시어를 결과값으로 바꾼다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
element는 다음중 하나다. 다음 회에 더 자세히 설명할 것이다.
|
|
Packit |
90a5c9 |
지금은 SSI로 할 수 있는 몇가지 예를 보인다
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
<!--#echo var="DATE_LOCAL" -->
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
echo element는 변수값을 그대로 출력한다.
|
|
Packit |
90a5c9 |
CGI 프로그램에 제공하는 환경변수들 외에도 여러 표준 변수가
|
|
Packit |
90a5c9 |
있다. 또, set element를 사용하여 직접 변수를
|
|
Packit |
90a5c9 |
정의할 수도 있다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
날짜 출력 형식이 마음에 들지 않는다면, 다음과 같이
|
|
Packit |
90a5c9 |
config element의 timefmt attribute를
|
|
Packit |
90a5c9 |
사용한다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
<!--#config timefmt="%A %B %d, %Y" -->
|
|
Packit |
90a5c9 |
Today is <!--#echo var="DATE_LOCAL" -->
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
이 문서는 <!--#flastmod file="index.html" -->에 마지막으로 수정되었다
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
이 element도 timefmt 형식 설정에 달렸다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
일반적인 SSI 사용법중 하나로, 많이들 애용하는 ``방문수
|
|
Packit |
90a5c9 |
카운터'' 같은 CGI 프로그램 결과를 출력한다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
<!--#include virtual="/cgi-bin/counter.pl" -->
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
다음은 HTML 문서에 사용할 수 있는 몇가지 SSI 예제다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
수정되었나?
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
앞에서 SSI를 사용하여 사용자에게 문서의 최근수정일을
|
|
Packit |
90a5c9 |
알릴 수 있다고 말했다. 그러나 실제 방법은 알려주지 않았다.
|
|
Packit |
90a5c9 |
다음 코드를 HTML 문서에 사용하면 페이지에 시간 기록을 남긴다.
|
|
Packit |
90a5c9 |
물론 위에서 설명한대로 SSI가 올바로 작동해야 한다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
<!--#config timefmt="%A %B %d, %Y" -->
|
|
Packit |
90a5c9 |
이 문서는 <!--#flastmod file="ssi.shtml" -->에 마지막으로 수정되었다;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
물론 ssi.shtml 대신 원하는 실제 파일명을
|
|
Packit |
90a5c9 |
사용한다. 아무 페이지에라도 붙여넣을 수 있는 범용코드를
|
|
Packit |
90a5c9 |
원한다면, 파일명 대신 LAST_MODIFIED 변수를
|
|
Packit |
90a5c9 |
사용한다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
<!--#config timefmt="%D" -->
|
|
Packit |
90a5c9 |
This file last modified <!--#echo var="LAST_MODIFIED" -->
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
timefmt 형식에 대한 자세한 정보는 검색엔진에서
|
|
Packit |
90a5c9 |
strftime 을 찾아봐라. 문법은 같다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
여러 페이지가 있는 사이트를 관리한다면 페이지 전체를
|
|
Packit |
90a5c9 |
수정하는 것은, 특히 페이지들이 표준 외관을 가지도록 수정하는
|
|
Packit |
90a5c9 |
것은 정말로 괴롭다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
페이지 상단(header)과 하단(footer)을 파일로 포함하여
|
|
Packit |
90a5c9 |
이런 수정의 부담을 덜 수 있다. 모든 페이지에서
|
|
Packit |
90a5c9 |
include SSI 명령어를 사용하여 페이지 하단 파일
|
|
Packit |
90a5c9 |
하나를 포함하면 된다. include element의
|
|
Packit |
90a5c9 |
file attribute나 virtual attribute로
|
|
Packit |
90a5c9 |
포함할 파일을 지정한다. file attribute는 현재
|
|
Packit |
90a5c9 |
디렉토리에 상대적인 파일경로다. 즉, (/로 시작하는)
|
|
Packit |
90a5c9 |
절대파일경로나 경로 안에 ../를 사용할 수 없다. 아마도 서비스하는
|
|
Packit |
90a5c9 |
문서의 상대 URL을 지정할 수 있는 virtual attribute가
|
|
Packit |
90a5c9 |
더 유용할 것이다. 경로를 /로 시작할 수 있지만, 포함하려는
|
|
Packit |
90a5c9 |
파일이 서비스하는 파일과 같은 서버에 있어야 한다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
<!--#include virtual="/footer.html" -->
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
나는 보통 이 두가지를 합쳐서 포함할 페이지 하단 파일에
|
|
Packit |
90a5c9 |
LAST_MODIFIED 지시어를 넣는다. 포함하려는 파일에도
|
|
Packit |
90a5c9 |
SSI 지시어가 나올 수 있으며, 이렇게 포함한 파일이 다른 파일을
|
|
Packit |
90a5c9 |
포함하는 식으로 여러번 계속 포함할 수도 있다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
시간 형식 config (설정) 외에 두가지를 더
|
|
Packit |
90a5c9 |
config (설정)할 수 있다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
보통 SSI 지시어가 잘못되면 다음과 같은 문구가 나온다
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
[an error occurred while processing this directive]
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
이 문구를 변경하고 싶다면 config element의
|
|
Packit |
90a5c9 |
errmsg attribute를 사용하여 변경한다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
<!--#config errmsg="[It appears that you don't know how to use SSI]" -->
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
사이트를 서비스하기 전에 모든 SSI 지시어 문제를 해결하여
|
|
Packit |
90a5c9 |
사용자가 이런 문구를 보지 않길 바란다. (그렇지?)
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
그리고 sizefmt attribute가 반환하는 파일크기
|
|
Packit |
90a5c9 |
형식을 config (설정)할 수 있다. 바이트로 크기를
|
|
Packit |
90a5c9 |
보여주려면 bytes , 적절히 Kb나 Mb로 크기를
|
|
Packit |
90a5c9 |
보여주려면 abbrev 를 사용한다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
나는 다음 달에 작은 CGI 프로그램과 SSI를 같이 사용하는
|
|
Packit |
90a5c9 |
글을 쓸 예정이다. 지금은 exec element로 할
|
|
Packit |
90a5c9 |
수 있는 다른 것들을 설명할 것이다. SSI는 실제 쉘을 (정확히는
|
|
Packit |
90a5c9 |
/bin/sh 나 Win32를 사용한다면 DOS 쉘) 사용하여
|
|
Packit |
90a5c9 |
명령어를 실행한다. 예를 들어, 다음은 디렉토리 목록을 보여준다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
<pre>
|
|
Packit |
90a5c9 |
<!--#exec cmd="ls" -->
|
|
Packit |
90a5c9 |
</pre>
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
or, on Windows
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
<pre>
|
|
Packit |
90a5c9 |
<!--#exec cmd="dir" -->
|
|
Packit |
90a5c9 |
</pre>
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
dir 출력에 브라우저가 혼동할
|
|
Packit |
90a5c9 |
``<dir >'' 문자열이 포함되있기때문에,
|
|
Packit |
90a5c9 |
윈도우즈에서 이 지시어를 사용하면 결과가 조금 이상할 것이다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
이 기능은 exec 태그에 사용한 어떤 명령어라도
|
|
Packit |
90a5c9 |
실행할 수 있기때문에 매우 위험하다. ``방명록''과 같이 사용자가
|
|
Packit |
90a5c9 |
웹페이지 내용을 수정할 수 있는 환경이라면, 이 기능을 절대로
|
|
Packit |
90a5c9 |
사용해선 안된다. Options 지시어에
|
|
Packit |
90a5c9 |
IncludesNOEXEC 아규먼트를 사용하여 SSI를 허용하지만
|
|
Packit |
90a5c9 |
exec 기능을 막을 수 있다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
내용을 출력하는 기능 외에 아파치 SSI는 변수 설정이 가능하고,
|
|
Packit |
90a5c9 |
비교문과 조건문에 이 변수를 사용할 수 있다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
이 글에서 설명하는 대부분의 기능은 아파치 1.2 이후부터
|
|
Packit |
90a5c9 |
사용할 수 있다. 물론, 아파치 1.2 이상을 사용하지 않는다면
|
|
Packit |
90a5c9 |
아마도 빨리 업그레이드해야 한다. 해라. 지금 해라. 기다릴
|
|
Packit |
90a5c9 |
것이다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
set 지시어를 사용하여 나중에 사용할 변수를
|
|
Packit |
90a5c9 |
설정할 수 있다. 앞으로 변수가 필요하기때문에 먼저 설명한다.
|
|
Packit |
90a5c9 |
문법은 다음과 같다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
<!--#set var="name" value="Rich" -->
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
다음과 같이 값을 문자그대로 설정하지 않고 환경변수나 위에서 설명한 변수(예를
|
|
Packit |
90a5c9 |
들어, LAST_MODIFIED )와 같이 다른 변수를 사용하여
|
|
Packit |
90a5c9 |
변수값을 설정할 수도 있다. 이때 변수명 앞에 달러 표시($)를
|
|
Packit |
90a5c9 |
붙여서 문자열이 아닌 변수임을 표시한다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
<!--#set var="modified" value="$LAST_MODIFIED" -->
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
변수값에 달러 문자를 그대로 입력하려면 달러 표시 앞에
|
|
Packit |
90a5c9 |
백슬래쉬를 사용한다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
<!--#set var="cost" value="\$100" -->
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
마지막으로 긴 문자열 중간에 변수를 사용하는데 뒤에 있는
|
|
Packit |
90a5c9 |
문자도 변수명으로 오인하여 혼동되는 경우, 변수명을 대괄호로
|
|
Packit |
90a5c9 |
묶어서 확실히 한다. (좋은 예를 찾기 힘들지만, 무슨 말인지
|
|
Packit |
90a5c9 |
이해하길 바란다.)
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
<!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" -->
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
변수를 설정하고 비교할 수 있으니 조건문이 가능하다. 이제
|
|
Packit |
90a5c9 |
SSI가 일종의 간단한 프로그래밍언어가 된다.
|
|
Packit |
90a5c9 |
mod_include 는 조건문을 만드는 if ,
|
|
Packit |
90a5c9 |
elif , else , endif
|
|
Packit |
90a5c9 |
구조를 제공한다. 실제 한 페이지로 여러 논리적인 페이지를
|
|
Packit |
90a5c9 |
만들 수 있다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
조건문 구조는 다음과 같다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
<!--#if expr="test_condition" -->
|
|
Packit |
90a5c9 |
<!--#elif expr="test_condition" -->
|
|
Packit |
90a5c9 |
<!--#else -->
|
|
Packit |
90a5c9 |
<!--#endif -->
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
test_condition에는 어떤 논리비교라도 사용할
|
|
Packit |
90a5c9 |
수 있다. 값을 다른 값과 비교하거나, 특정 값이 ``참''인지
|
|
Packit |
90a5c9 |
검사한다. (문자열이 비어있지 않으면 참이다.) 사용가능한
|
|
Packit |
90a5c9 |
비교 연산자를 모두 보려면, mod_include
|
|
Packit |
90a5c9 |
문서를 참고하라. 다음은 조건문을 사용한 몇가지 예제다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
설정파일에 다음 줄을 추가한다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
BrowserMatchNoCase macintosh Mac
|
|
Packit |
90a5c9 |
BrowserMatchNoCase MSIE InternetExplorer
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
클라이언트가 맥킨토시에서 실행하는 Internet Explorer라면
|
|
Packit |
90a5c9 |
환경변수 ``Mac''과 ``InternetExplorer'' 모두 참으로 설정한다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
그리고 SSI 문서에 다음과 같이 적는다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
<!--#if expr="${Mac} && ${InternetExplorer}" -->
|
|
Packit |
90a5c9 |
여기에 사과문가 나온다
|
|
Packit |
90a5c9 |
<!--#else -->
|
|
Packit |
90a5c9 |
여기에 멋진 JavaScript 코드가 나온다
|
|
Packit |
90a5c9 |
<!--#endif -->
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
내가 매킨토시 IE에 반감이 있는 것은 아니다. 나는 단지
|
|
Packit |
90a5c9 |
저번주에 다른 곳에서는 문제가 없는 JavaScript 코드가 매킨토시
|
|
Packit |
90a5c9 |
IE에서는 동작하지 않아서 몇시간을 고생했다. 위는 임시
|
|
Packit |
90a5c9 |
해결책이다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
(직접 정의하였건 일반 환경변수이건) 어떤 변수라도 조건문에
|
|
Packit |
90a5c9 |
사용할 수 있다. 아라치는 SetEnvIf 나 다른 관련
|
|
Packit |
90a5c9 |
지시어로 환경변수를 설정할 수 있기때문에 CGI 없이도 멋지게
|
|
Packit |
90a5c9 |
동적인 내용을 만들 수 있다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
SSI는 확실히 CGI나 동적인 웹페이지를 생성하는 다른 기술을
|
|
Packit |
90a5c9 |
대체할 수 없다. 그러나 많은 추가 작업없이 페이지에 동적인
|
|
Packit |
90a5c9 |
내용을 조금 추가하기에는 훌륭한 방법이다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
가능한 언어: en |
|
|
Packit |
90a5c9 |
es |
|
|
Packit |
90a5c9 |
fr |
|
|
Packit |
90a5c9 |
ja |
|
|
Packit |
90a5c9 |
ko
|
|
Packit |
90a5c9 |
Notice:This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our mailing lists.
|
|
Packit |
90a5c9 |
<script type="text/javascript">
|
|
Packit |
90a5c9 |
var comments_shortname = 'httpd';
|
|
Packit |
90a5c9 |
var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/ssi.html';
|
|
Packit |
90a5c9 |
(function(w, d) {
|
|
Packit |
90a5c9 |
if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
|
|
Packit |
90a5c9 |
d.write('
|
|
Packit |
90a5c9 |
var s = d.createElement('script');
|
|
Packit |
90a5c9 |
s.type = 'text/javascript';
|
|
Packit |
90a5c9 |
s.async = true;
|
|
Packit |
90a5c9 |
s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
|
|
Packit |
90a5c9 |
(d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else {
|
|
Packit |
90a5c9 |
d.write('
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
})(window, document);
|
|
Packit |
90a5c9 |
//--></script>
|
|
Packit |
90a5c9 |
Copyright 2018 The Apache Software Foundation. Licensed under the Apache License, Version 2.0.
|
|
Packit |
90a5c9 |
모듈 | 지시어들 | FAQ | 용어 | 사이트맵 <script type="text/javascript">
|
|
Packit |
90a5c9 |
if (typeof(prettyPrint) !== 'undefined') {
|
|
Packit |
90a5c9 |
prettyPrint();
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
//--></script>
|
|
Packit |
90a5c9 |
</body></html>
|