SHTML 및 ASP는 비슷합니다. SHTML의 이름을 따서 명명 된 파일에서는 ASP의 지침과 마찬가지로 일부 SSI 지침이 사용됩니다. shtml 파일에 ssi 명령어를 작성할 수 있습니다. 클라이언트 가이 SHTML 파일에 액세스 할 때
서버 측은이 SHTML 파일을 읽고 해석하고 SHTML 파일에 포함 된 SSI 지침을 해석합니다. 예를 들어 : SSI 지침을 사용하여 SHTML 파일의 다른 HTML 파일 (#include)을 참조 할 수 있습니다. 서버가 클라이언트에 전송 한 파일은 이미 설명 된 SHTML에 SSI 지침이 없다는 것입니다. 그것은 HTML이 가지고 있지 않은 기능을 구현합니다. 즉, 역학을 구현할 수 있습니다.
SHTML은 HTML의 진화라고 할 수 있습니다. Sina의 뉴스 시스템과 마찬가지로 뉴스 내용은 고정되어 있지만 광고 및 메뉴는 #include에 인용됩니다.
현재 주로 다음과 같은 용도가 있습니다.
1. 디스플레이 서버 측 환경 변수 <#echo>
2. 텍스트 내용을 문서에 직접 삽입 <#include>
3. 웹 문서 관련 정보 표시 <#flastmod> <#fsize> (예 : 파일 생성 날짜/크기 등)
4. 서버에서 다양한 프로그램을 직접 실행합니다 <#Exec> (예 : CGI 또는 기타 실행 가능한 프로그램).
5. SSI 정보 디스플레이 형식 <#config> 설정 (예 : 파일 생성 날짜/크기 디스플레이 메소드)
Advanced SSI <xssi>는 조건부 명령문을 사용하도록 변수를 설정할 수 있습니다.
SSI 사용
SSI는 웹 서버에 제공되는 일련의 명령입니다. 이 명령은 HTML 문서의 주석 내용에 직접 포함됩니다. 좋다:
<#include file = info.htm->
SSI 지침으로 info.htm의 내용을 현재 페이지에 복사하는 데 사용됩니다. 방문자가 탐색하면 다른 HTML 문서에 info.htm의 내용이 표시됩니다.
다른 SSI 지침의 사용 양식은 기본적으로 지금 언급 한 것과 동일합니다. SSI의 사용법은 작은 코드를 삽입하고 있으며 사용 양식은 매우 간단하다는 것을 알 수 있습니다.
물론 웹 서버가 SSI를 지원하지 않으면 단순히 주석 정보로 취급하고 컨텐츠를 직접 건너 뜁니다. 브라우저 도이 정보를 무시합니다.
내 웹 서버에서 SSI 기능을 구성하는 방법은 무엇입니까?
일부 웹 서버 (예 : IIS 4.0/Sambar 4.2)에서 #include 지시문이 포함 된 파일은 SSI 통역사에 매핑 된 확장자를 사용해야합니다. 그렇지 않으면 웹 서버는 SSI 지침을 처리하지 않습니다. 기본적으로 확장자 .stm, .shtm 및 .shtml은 통역사 (ssinc.dll)에 매핑됩니다.
Apache는 설정을 기반으로하며 다음과 같은 SRM.Conf를 수정합니다.
addType text/x-server-parsed-html .shtml .shtml extension이있는 파일에 대해서만 ssi 지시문을 구문 분석합니다.
AddType Text/X-Server-Parsed-Html .html 모든 HTML 문서에 대한 SSI 지시문을 구문 분석합니다.
Netscape Web Server는 직접 관리 서버 (관리 서버)를 사용하여 SSI 기능을 활성화 할 수 있습니다.
웹 사이트는 서버 관리자 프로그램에서 매핑 태그를 사용하고 컨텐츠 유형을 다음과 같이 추가합니다. wwwserver/html-ssi
CERN 서버는 SSI를 지원하지 않습니다. SSI 사기 방법을 사용할 수 있습니다. http://sw.cse.bris.ac.uk/webtools/fakessi.html에서 Perl 스크립트를 다운로드하여 CERN 서버에서 일부 SSI 지침을 사용하도록하십시오. (Exec Directive는 지원되지 않습니다.)
기본 SSI 명령 형식
기본 SSI 명령 형식 :
프로그램 코드 :
<! ---- 명령 이름 = 명령 매개 변수>
<! ---- 명령 이름 = 명령 매개 변수>
좋다
프로그램 코드 :
<#include file = info.htm->
<#include file = info.htm->
설명 :
1. <!->는 HTML 구문에서 주석입니다. 웹 서버가 SSI를 지원하지 않으면이 정보는 무시됩니다.
2. #include는 SSI 지침 중 하나입니다.
3. 파일은 포함 된 info.htm의 매개 변수이며 매개 변수 값 이며이 명령에 포함될 문서 이름을 나타냅니다.
알아채다:
1. <!- # 번호 사이에는 공간이 없으며 SSI 명령어와 매개 변수 만 존재합니다.
2. 위의 구두점 =, 아무도 놓칠 수 없습니다.
3. SSI 지침은 사례에 민감하므로 매개 변수는 작동하려면 소문자 여야합니다.
SSI 지침 사용에 대한 자세한 설명
#Echo 데모
효과:
환경 변수를 페이지에 삽입하십시오.
문법:
프로그램 코드 :
<!-#echo var = 변수 이름->
<!-#echo var = 변수 이름->
이 문서의 이름 : 프로그램 코드 :
<!-#echo var = document_name->
<!-#echo var = document_name->
현재 시간 : 프로그램 코드 :
<!-#echo var = date_local->
<!-#echo var = date_local->
귀하의 IP 주소는 프로그램 코드입니다.
<!-#echo var = remote_addr->
<!-#echo var = remote_addr->
#시연을 포함하십시오
효과:
텍스트 파일의 내용을 문서 페이지에 직접 삽입하십시오.
문법:
프로그램 코드 :
<#include file = 파일 이름->
<#include virtual = 파일 이름->
<#include file = 파일 이름->
<#include virtual = 파일 이름->
파일 파일 이름은 #include 지시문을 사용하는 문서가있는 디렉토리와 관련된 상대 경로입니다. 포함 된 파일은 동일한 레벨 디렉토리 또는 해당 하위 디렉토리에있을 수 있지만 이전 레벨 디렉토리에서는 할 수 없습니다. 현재 디렉토리의 nav_head.htm 문서가 file = nav_head.htm 인 경우
가상 파일 이름은 웹 사이트의 가상 디렉토리의 전체 경로입니다. 서버 문서의 루트 디렉토리 아래 Hoyi 디렉토리의 nav_head.htm 파일을 의미하는 경우; 그런 다음 파일 =/hoyi/nav_head.htm입니다
매개 변수 :
파일이 문서와 관련하여 포함 된 파일의 위치를 지정합니다.
가상 서버 문서의 루트 디렉토리에 대한 위치를 지정합니다.
알아채다:
1. 파일 이름에는 확장자가 있어야합니다.
2. 포함 된 파일에는 파일 확장자가있을 수 있습니다. HTM 확장을 직접 사용하는 것이 가장 편리하다고 생각합니다. Microsoft는 .inc Extension을 사용하는 것이 좋습니다 (취미에 따라 다름).
예:
프로그램 코드 :
<#include file = nav_head.htm-> 헤더 파일을 현재 페이지에 삽입하십시오
<#include file = nav_foot.htm-> 테일 파일을 현재 페이지에 삽입하십시오
<#include file = nav_head.htm-> 헤더 파일을 현재 페이지에 삽입하십시오
<#include file = nav_foot.htm-> 테일 파일을 현재 페이지에 삽입하십시오
#flastmod 및 #fsize 데모
기능 : #FlastMod 파일 마지막 업데이트 날짜
#fsize 파일 길이
문법:
프로그램 코드 :
<!-#flastMod 파일 = 파일 이름->
<!-#fsize 파일 = 파일 이름->
<!-#flastMod 파일 = 파일 이름->
<!-#fsize 파일 = 파일 이름->
매개 변수 :
파일은 현재 디렉토리의 info.txt 문서를 나타내는 info.txt와 같은이 문서와 관련된 포함 파일의 위치를 지정합니다.
Virtual은 /hoyi/info.txt와 같은 서버 문서의 루트 디렉토리에 대한 위치를 지정합니다.
알아채다:
파일 이름에는 확장자가 있어야합니다.
예:
프로그램 코드 :
<!-#flastmod 파일 = News.htm->
<!-#flastmod 파일 = News.htm->
현재 디렉토리에 뉴스의 최신 업데이트 날짜를 현재 페이지에 삽입하십시오.
프로그램 코드 :
<!-#fsize file = news.htm->
<!-#fsize file = news.htm->
현재 디렉토리에 현재 페이지에 News.htm의 파일 크기를 입력하십시오.
#Exec 데모
효과:
외부 프로그램의 출력을 페이지에 삽입하십시오. 사용 된 매개 변수가 CMD 또는 CGI인지 여부에 따라 CGI 프로그램에 삽입되거나 일반 응용 프로그램의 입력을 할 수 있습니다.
문법:
프로그램 코드 :
<!-#exec cmd = 파일 이름->
<!-#exec cgi = 파일 이름->
<!-#exec cmd = 파일 이름->
<!-#exec cgi = 파일 이름->
매개 변수 :
CMD 정기 응용 프로그램
CGI CGI 스크립트 프로그램
예:
프로그램 코드 :
<!-#exec cmd = cat /etc /passwd->는 비밀번호 파일을 표시합니다
<!-#exec cmd = dir /b->는 현재 디렉토리에 파일 목록이 표시됩니다.
<!-#exec cgi =/cgi-bin/gb.cgi-> CGI 프로그램 gb.cgi가 실행됩니다.
<!-#exec cgi =/cgi-bin/access_log.cgi-> cgi 프로그램 access_log.cgi가 실행됩니다.
<!-#exec cmd = cat /etc /passwd->는 비밀번호 파일을 표시합니다
<!-#exec cmd = dir /b->는 현재 디렉토리에 파일 목록이 표시됩니다.
<!-#exec cgi =/cgi-bin/gb.cgi-> CGI 프로그램 gb.cgi가 실행됩니다.
<!-#exec cgi =/cgi-bin/access_log.cgi-> cgi 프로그램 access_log.cgi가 실행됩니다.
알아채다:
위의 예에서 알 수 있듯이이 명령어는 매우 편리하지만 보안 문제도 있습니다.
금지 된 방법 :
. Apache, 옵션 삭제 execcgi line in access.conf;
. IIS에서 #Exec 명령을 비활성화하려면 ssiexecdisable metadatabase를 수정할 수 있습니다.
#config
기능 : 클라이언트 브라우저에 반환 된 오류 메시지, 날짜 및 파일 크기의 형식을 지정합니다.
문법:
프로그램 코드 :
<!-#configerrmsg = 사용자 정의 오류 메시지->
<!-#configsizefmt = 디스플레이 장치->
<!-#configtimefmt = 디스플레이 형식->
<!-#configerrmsg = 사용자 정의 오류 메시지->
<!-#configsizefmt = 디스플레이 장치->
<!-#configtimefmt = 디스플레이 형식->
매개 변수 :
ERRMSG 사용자 정의 SSI 실행 오류 메시지는 원하는 방식으로 사용할 수 있습니다.
sizefmt 파일 크기 디스플레이 방법, 기본값은 바이트 메소드 (바이트)를 킬로 바이트 메소드 (Abbrev)로 변경할 수 있습니다.
TimeFMT 시간 표시 메소드, 가장 유연한 구성 속성.
예 : 존재하지 않는 파일의 크기를 보여줍니다.
프로그램 코드 :
<!-#configerrmsg = 서버 실행 오류, 관리자 [email protected]에 문의하십시오. 감사합니다! ->
<!-#fsize 파일 = 없음 file.htm->
<!-#configerrmsg = 서버 실행 오류, 관리자 [email protected]에 문의하십시오. 감사합니다! ->
<!-#fsize 파일 = 없음 file.htm->
킬로 바이트로 파일 크기를 표시합니다
프로그램 코드 :
<!-#configsizefmt = abbrev->
<!-#fsizefile = news.htm->
<!-#configsizefmt = abbrev->
<!-#fsizefile = news.htm->
특정 시간 형식으로 표시 시간을 표시합니다
프로그램 코드 :
<!-#configtimefmt = %y 년/ %m 달
<!-#echo var = date_local-> 오늘의 요일, 월 및 시간대를 보여줍니다.
<!-#configtimefmt = 오늘의 %a, %b, 서버 시간대는 %z, 예->
<!-#echo var = date_local->
<!-#configtimefmt = %y 년/ %m 달
<!-#echo var = date_local-> 오늘의 요일, 월 및 시간대를 보여줍니다.
<!-#configtimefmt = 오늘의 %a, %b, 서버 시간대는 %z, 예->
<!-#echo var = date_local->
XSSI
XSSI (Extended SSI)는 Apache 1.2 이상의 MOD-Include 모듈에 내장 된 고급 SSI 명령 세트입니다.
그중에서도 사용 가능한 지침은 다음과 같습니다.
#printenv
#세트
#만약에
#printenv
기능 : 웹 서버 환경에 현재 존재하는 모든 환경 변수를 표시합니다.
구문 : 프로그램 코드 :
<!-#printenv->
<!-#printenv->
매개 변수 : 없음
예:
프로그램 코드 :
<!-#printenv->
<!-#printenv->
#세트
기능 : 후속 IF 문에 사용할 변수에 값을 할당 할 수 있습니다.
구문 : 프로그램 코드 :
<!-#set var = 변수 이름 값 = 변수 값->
<!-#set var = 변수 이름 값 = 변수 값->
매개 변수 : 없음
예 : 프로그램 코드 :
<!-#set var = colorValue = 빨간색->
<!-#set var = colorValue = 빨간색->
#만약에
기능 : IF 문을 사용할 때 계산 요구 사항에 따라 표시되는 데이터를 변경할 수있는 페이지를 만듭니다.
구문 : 프로그램 코드 :
<!-#if expr = $ 변수 이름 = 변수 값 a->
콘텐츠 표시
<!-#elif expr = $ 변수 이름 = 변수 값 b->
콘텐츠 표시
<!-#else->
콘텐츠 표시
<!-#endif->
<!-#if expr = $ 변수 이름 = 변수 값 a->
콘텐츠 표시
<!-#elif expr = $ 변수 이름 = 변수 값 b->
콘텐츠 표시
<!-#else->
콘텐츠 표시
<!-#endif->
예:
프로그램 코드 :
<!-#if expr = $ server_name = http : //www.31896.net/->
서버 보안 토론 영역 http://www.31896.net/에 오신 것을 환영합니다.
<!-#elif expr = $ server_name = http : //www.fineacer.org/->
Qingchang Computer Network Security Online http://www.fineacer.org/에 오신 것을 환영합니다.
<!-#else->
서버 보안 토론 영역에 오신 것을 환영합니다!
<!-#endif->
<!-#if expr = $ server_name = http : //www.31896.net/->
서버 보안 토론 영역 http://www.31896.net/에 오신 것을 환영합니다.
<!-#elif expr = $ server_name = http : //www.fineacer.org/->
Qingchang Computer Network Security Online http://www.fineacer.org/에 오신 것을 환영합니다.
<!-#else->
서버 보안 토론 영역에 오신 것을 환영합니다!
<!-#endif->
참고 : 이전 지침에 사용 된 백 슬래시는 내부 따옴표를 대체하여 결말 표현식으로 해석되지 않도록 사용됩니다. 생략되지 않습니다.
1. 구성 명령
구성 명령은 주로 SSI의 기본 설정을 수정하는 데 사용됩니다. 안에:
ERRMSG : 기본 오류 메시지를 설정하십시오. 사용자가 정상적으로 설정 한 오류 정보를 반환하려면 ERRMSG 매개 변수를 HTML 파일의 다른 SSI 명령 앞에 배치해야합니다. 그렇지 않으면 클라이언트가 사용자가 설정 한 사용자 정의 정보 대신 기본 오류 정보 만 표시 할 수 있습니다.
<!-#configerrmsg = 오류! [email protected]>로 이메일을 보내주십시오
TimeFMT : 날짜와 시간의 사용 형식을 정의합니다. Echo 명령 전에 TimeFMT 매개 변수를 사용해야합니다.
<!-#configtimefmt = %a, %b %d, %y->
<!-#echo var = last_modified->
결과는 다음과 같이 표시됩니다.
2000 년 4 월 12 일 수요일
아마도 사용자는 위의 예에서 사용되는 %A %B %D에 익숙하지 않을 수 있습니다. SSI에서보다 일반적으로 사용되는 날짜 및 시간 형식 중 일부를 테이블 형태로 요약하겠습니다.
sizefmt : 파일 크기가 바이트, 킬로 바이트 또는 메가 바이트로 표현되는지 여부를 결정합니다. 바이트 인 경우 파라미터 값은 바이트입니다. 약어는 킬로 바이트 및 메가 바이트에 사용될 수 있습니다. 마찬가지로, sizefmt 매개 변수는 fsize 명령을 사용하기 전에 배치해야합니다.
<!-#configsizefmt = 바이트->
<!-#fsize file = index.html->
2. 명령 포함
포함 명령은 다른 문서의 텍스트 나 그림을 현재 구문 분석 된 문서에 삽입 할 수 있으며, 이는 전체 SSI의 핵심입니다. 포함 명령을 통해 전체 사이트를 즉시 업데이트하려면 하나의 파일 만 변경하면됩니다!
포함 명령에는 두 가지 매개 변수가 있습니다.
가상 : 서버 측의 문서에 대한 가상 경로를 제공합니다. 예를 들어:
<#include virtual =/conture/header.html ->
파일 : 현재 디렉토리에 대한 상대 경로를 제공합니다. 예를 들어:
<#include file = header.html->
이를 위해서는 각 디렉토리에 Header.html 파일이 포함되어야합니다.
3. 에코 명령
Echo 명령은 다음 환경 변수를 표시 할 수 있습니다.
Document_Name : 현재 문서의 이름을 표시합니다.
<!-#echo var = document_name->
결과는 다음과 같이 표시됩니다.
index.html
Document_URI : 현재 문서에 대한 가상 경로를 표시합니다. 예를 들어:
<!-#echo var = document_uri->
결과는 다음과 같이 표시됩니다.
/yourdirectory/yourfilename.html
웹 사이트가 계속 성장함에 따라 더 길고 길어지는 URL은 확실히 두통이 될 것입니다. SSI를 사용하면 모든 것이 해결됩니다. 웹 사이트와 SSI 명령의 도메인 이름을 결합하여 전체 URL을 표시 할 수 있기 때문입니다.
http : // yourdomain%3c!-/#echo var = & ... uot; ->
query_string_unescaped : 탈출되지 않은 클라이언트가 보낸 쿼리 문자열을 표시하며, 모든 특수 문자가 탈출 문자가 선행합니다. 예를 들어:
<!-#echo var = query_string_unescaped->
date_local : 서버 설정 시간대의 날짜와 시간을 표시합니다. 사용자는 config 명령의 TimeFMT 매개 변수를 기반으로 출력 정보를 사용자 정의 할 수 있습니다. 예를 들어:
<!-#configtimefmt = %a, %b의 %d, 연도 %y->
<!-#echo var = date_local->
결과는 다음과 같이 표시됩니다.
4 월 15 일 토요일, 2000 년
date_gmt : 함수는 GMT를 기반으로 날짜를 반환한다는 점을 제외하고 date_local과 동일합니다. 예를 들어:
<!-#echo var = date_gmt->
last_modified : 현재 문서의 마지막 업데이트 시간을 표시합니다. 마찬가지로 이것은 SSI에서 매우 실용적인 기능입니다. HTML 문서에 다음 간단한 텍스트를 추가하는 한 페이지에 업데이트 시간을 동적으로 표시 할 수 있습니다.
<!-#echo var = last_modified->
CGI 환경 변수
SSI 환경 변수 외에도 Echo 명령은 다음 CGI 환경 변수를 표시 할 수 있습니다.
Server_Software : 서버 소프트웨어의 이름과 버전을 표시합니다. 예를 들어:
<!-#echo var = server_software->
Server_Name : 서버의 호스트 이름, DNS 별칭 또는 IP 주소를 표시합니다. 예를 들어:
<!-#echo var = server_name->
Server_Protocol : HTTP/1.0과 같은 클라이언트 요청에서 사용하는 프로토콜 이름과 버전을 표시합니다. 예를 들어:
<!-#echo var = server_protocol->
Server_port : 서버의 응답 포트를 표시합니다. 예를 들어:
<!-#echo var = server_port->
request_method : get, head 및 post를 포함하여 클라이언트의 문서 요청 메소드를 표시합니다. 예를 들어:
<!-#echo var = request_method->
Remote_host : 요청 메시지를 발행 한 클라이언트 호스트의 이름을 표시합니다.
<!-#echo var = Remote_host->
Remote_addr : 요청 정보를 발행 한 클라이언트의 IP 주소를 표시합니다.
<!-#echo var = remote_addr->
Auth_type : 사용자 ID의 인증 방법을 표시합니다.
<!-#echo var = auth_type->
Remote_user : 보호 된 페이지에 액세스하는 사용자가 사용하는 계정 이름을 표시합니다.
<!-#echo var = remote_user->
4. fsize : 지정된 파일의 크기를 표시합니다. config 명령의 sizefmt 매개 변수로 출력 형식을 사용자 정의 할 수 있습니다.
<!-#fsize file = index_working.html->
5. FLASTMOD : 지정된 파일의 마지막 수정 날짜를 표시합니다. config 명령의 TimeFMT 매개 변수로 출력 형식을 제어 할 수 있습니다.
<!-#configtimefmt = %a, %b의 %d, 연도 %y->
<!-#flastmod file = file.html->
여기에서는 FlastMod 매개 변수를 사용하여 페이지의 모든 링크 된 페이지의 업데이트 날짜를 표시 할 수 있습니다. 이 방법은 다음과 같습니다.
<!-#configtimefmt = %b %d, %y->
<a href =/directory/file.html> 파일 </a>
<!-#flastmod virtual =/directory/file.html->
<a href =/other_directory/other_file.html> 다른 파일 </a>
<!-#flastmod virtual =/other_directory/other_file.html->
결과는 다음과 같이 표시됩니다.
2000 년 4 월 19 일 파일
또 다른 파일 2000 년 1 월 8 일
6. exec
EXEC 명령은 CGI 스크립트 또는 쉘 명령을 실행할 수 있습니다. 사용 방법은 다음과 같습니다.
CMD : 지정된 문자열을 실행하기 위해 /bin /sh를 사용합니다. SSI가 containNoExec 옵션을 사용하면 명령이 차단됩니다.
CGI : CGI 스크립트를 실행하는 데 사용할 수 있습니다. 예를 들어, 다음 예제에서는 서버 CGI-BIN 디렉토리의 Counter.pl 스크립트 프로그램을 사용하여 각 페이지에 카운터를 배치하십시오.
<!-#exec cgi =/cgi-bin/counter.pl->