변경사항 (가장 최근의 "일반적인 수정"부터)
(소소한 수정)
-129,14 +129,9 |
Alias류는 URL을 file-path로 보내므로 여타 디렉토리에 의존한 path들이 다 깨질 우려가 있습니다. <mysign(김동업,2007-2-12 10:12 pm)> |
|
: 오 그런가요. 좋은 정보 감사합니다~ ^^ <mysign([[Raymundo]],2007-2-12 10:23 pm)> |
|
Hi \\ |
nice, check it \\ |
\\ |
roleplayinggames.com <mysign(real rape videos,2007-4-19 2:09 pm)> |
<longcomments(100)> |
---- |
<trackbackreceived> |
|
</div> |
---- |
[[주인장분류]] [[위키위키분류]] [[컴퓨터분류]] |
-
- 1. 홈페이지 URL을 줄여 보자
-
-
- 1.1. 내 상황
-
- 1.2. 뭐가 필요한가?
-
- 1.3. .htaccess 수정
-
- 1.4. 예
-
- 1.5. 위키 쪽의 수정
-
-
- 1.5.1. 다른 페이지 또는 액션 링크
-
- 1.5.2. 스타일쉬트, 자바스크립트 등
-
1.6. 관련 문서
-
- 1.7. Comments
-
1. 홈페이지 URL을 줄여 보자
현재:
http://gypark.pe.kr/cgi-bin/wiki/wiki.pl/페이지이름
http://gypark.pe.kr/cgi-bin/wiki/wiki.pl/action=액션이름&옵션주저리주저리
이것을
http://gypark.pe.kr/wiki/페이지이름
http://gypark.pe.kr/wiki/action=액션이름&옵션주저리주저리
정도까지 줄이고 싶다. 음, 이렇게 대놓고 나란히 쓰니 그리 많이 줄어든 것 같지도 않다 -_-; 맘 같아서는 "gypark.pe.kr/페이지이름" 수준까지 줄여버리고 싶기도 한데, 나중에라도 블로그든 뭐든 더 추가로 계정에서 굴리려면 그걸 추가할 수 있는 여지는 남겨 둬야하니...
서버의 상태는 다음과 같다.
/home/gypark/ - 내 홈 디렉토리
/home/gypark/public_html/ - 내 DocumentRoot. http://gypark.pe.kr/ 로 접속했을 때
이 디렉토리가 최상위 디렉토리가 된다.
/home/gypark/public_html/cgi-bin/wiki/ - wiki.pl, wiki.css, 기타 등등 위키 파일들이 있는 곳
/home/gypark/public_html/cgi-bin/wiki/wiki.pl - 이게 위키 스크립트 파일
1.2. 뭐가 필요한가?
만일 아파치 웹서버 설정을 바꿀 수 있는 권한이 있다면 Alias 나 ScriptAlias 라는 옵션을 사용해서도 같은 효과를 낼 수 있다고는 하는데, 항상 그럴 수 있을리가 없다.
대신 여기서는 아파치의 [mod_rewrite 모듈]을 사용한다. 이것도 서버에 따라 설치되어 있지 않은 경우가 있을지 모르겠는데, 적어도 주인장이 쓰는 서버에는 설치되어 있더라 :-)
1.3. .htaccess 수정
/home/gypark/public_html/.htaccess 파일에 다음과 같은 내용을 집어넣는다. (좌측 행번호는 편의상 넣은 것임)
1 <IfModule mod_rewrite.c>
2 RewriteEngine On
3 RewriteRule ^wiki(/.*)?$ /cgi-bin/wiki/wiki.pl$1 [L]
4 </IfModule>
1번째 줄과 4번째 줄은, mod_rewrite 모듈이 있을 때만 사이에 있는 내용을 수행하라는 얘기.
2번째 줄은 저 모듈이 동작하도록 스위치를 켜는 거고,
3번째 줄이 핵심인데, 다음과 같은 식으로 구성되며:
RewriteRule 패턴 치환문자열 [옵션(없어도 됨)]
패턴은 정규표현식을 쓸 수 있다. 위의 경우 "^"는 라인의 시작, 괄호 (,)는 그룹, "."는 임의의 문자 하나, "*"는 "0개 이상" (따라서 ".*"는 null string을 포함한 임의의 문자열), "?"는 "없거나 1개 있거나" (이 물음표는 왼쪽 괄호쌍에 걸린다), "$"는 라인의 끝을 의미한다.
치환문자열에는 그냥 단순한 문자열이 들어가는데, 몇 가지 변수를 쓸 수 있다. 위의 "$1"은 "좌측 패턴에서 1번째 그룹"을 가리킨다.
브라우저의 요청을 검사하여서 저 패턴에 일치하는 부분이 있으면 그 부분을 치환문자열로 교체한 후에 넘겨 준다. 이 때 제일 끝의 옵션 [L]은 저 룰에 의해 치환이 일어났으면 그 아래에 있는 룰들을 무시하고 빠져나가라는 얘기인데, 지금은 그 아래에 다른 룰이 더 없으니 있으나 마나겠다.
RewriteRule의 자세한 설명은 [문서의 해당 섹션]을 참조하자. 사실 주인장도 읽다가 머리가 아파서 말았다. -.-;
브라우저 | 웹서버가 받은 요청 | rewrite 결과 | 최종 주소 | 비고 |
gypark.pe.kr/wiki | wiki | /cgi-bin/wiki/wiki.pl | gypark.pe.kr/cgi-bin/wiki/wiki.pl | 이 경우는 ( ) 안에 아무런 문자열이 없기 때문에 $1도 널 스트링 |
gypark.pe.kr/wiki/ | wiki/ | /cgi-bin/wiki/wiki.pl/ | gypark.pe.kr/cgi-bin/wiki/wiki.pl/ | $1 = "/" |
gypark.pe.kr/wiki/Diary | wiki/Diary | /cgi-bin/wiki/wiki.pl/Diary | gypark.pe.kr/cgi-bin/wiki/wiki.pl/Diary | _ |
gypark.pe.kr/wiki/action=version | wiki/action=version | /cgi-bin/wiki/wiki.pl/action=version | gypark.pe.kr/cgi-bin/wiki/wiki.pl/action=version | _ |
1.5. 위키 쪽의 수정
이제 http://gypark.pe.kr/wiki 라고만 주소창에 넣어도 http://gypark.pe.kr/cgi-bin/wiki/wiki.pl 이 뜨는 것을 볼 수 있다.
그런데 그 상태에서 위키 페이지 안의 이런 저런 링크들을 눌러보면 죄다 찾을 수 없다는 에러가 난다. 그리고 스타일쉬트도 적용되지 않아서 엉망으로 보일 것이다.
위키의 html 출력 중에 상대 경로로 되어 있는 링크다 URL 등이 죄다 저 바뀐 주소에 맞춰 적용되어서 그렇다.
예:
html 소스 내의 표현 | 브라우저의 해석 | 올바른 URL | 비고 |
href="wiki.pl/연습장" | gypark.pe.kr/wiki/wiki.pl/연습장 | gypark.pe.kr/cgi-bin/wiki/wiki.pl/연습장 또는 gypark.pe.kr/wiki/연습장 | 위키 내에 다른 페이지나 액션을 띄우는 링크는 죄다 이렇게 된다. |
href="wiki.css" | gypark.pe.kr/wiki/wiki.css 또는 gypark.pe.kr/wiki.css (주소가 gypark.pe.kr/wiki 인 경우) | gypark.pe.kr/cgi-bin/wiki/wiki.css | wikiscript.js 나, 첨부파일, 이미지 등의 경로도 전부 마찬가지 |
따라서, href=""안에 이제는 절대 경로가 들어가도록 해야 한다.
1.5.1. 다른 페이지 또는 액션 링크
내가 원하는 건 이런 링크들도 다 "gypark.pe.kr/wiki/" 형식으로 링크가 걸리는 것이다. 이 것은 환경설정 변수 중에 $FullUrl에 적어 준다.
$FullUrl = "http://gypark.pe.kr/wiki";
$FullUrl = "http:/wiki";
$FullUrl = "/wiki";
페이지나 액션을 링크하는 것은 위키 소스 내에서 "$ScriptName" 변수가 사용된다. 그리고 이 변수는 FullUrl의 값이 없으면 적절한 상대경로로 값이 정해지고, 있으면 FullUrl의 값을 그대로 사용한다.
1.5.2. 스타일쉬트, 자바스크립트 등
$ScriptName 변수를 쓰지 않고 주소를 표시하는 것들이 있다. 대표적으로 스타일 쉬트가 그렇다. 이런 건... 별 도리 없이 일일이 환경설정 변수를 고쳐 주어야 한다.
$StyleSheet = "http://gypark.pe.kr/cgi-bin/wiki/wiki.css";
$StyleSheet = "http:/cgi-bin/wiki/wiki.css";
$StyleSheet = "/cgi-bin/wiki/wiki.css";
$LogoUrl = "/raymundo_logo.jpg";
$IconDir = "/cgi-bin/wiki/icons/";
$UploadUrl = "http:/pub/gyparkwiki/upload";
$InterIconDir = "/cgi-bin/wiki/icons-inter/";
$JavaScript = "/cgi-bin/wiki/wikiscript.js";
$OekakiJar = "/cgi-bin/wiki/oekakibbs.jar";
$EmoticonPath = "/cgi-bin/wiki/emoticon/";
으음... 기존에 소스를 수정할 당시에 이런 날이 올 걸 예상하지 못하는 바람에, 브라우저에 노출되는 URL과, 위키 스크립트가 내부적으로 쓰는 디렉토리 이름들을 구분해 놓지 않아서, 사실 정확히 필요한 변수를 다 챙기기 힘들다. 이 외에도 누락된 게 있을지도 모름 =.=;
1.7. Comments
주인장분류 위키위키분류 컴퓨터분류