홈페이지주소간단히하기 페이지의 소스 보기
마지막으로 [b]
-- Loading page list... --
내용출력
로그인[l]
Diary
[f]
최근변경내역
[r]
페이지목록[i]
횡설수설[2]
게시판[3]
링크
수정할 수 없습니다: 홈페이지주소간단히하기 는 읽기 전용 페이지입니다.
== # 홈페이지 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 - 이게 위키 스크립트 파일 }}} === # 뭐가 필요한가? === 만일 아파치 웹서버 설정을 바꿀 수 있는 권한이 있다면 Alias 나 ScriptAlias 라는 옵션을 사용해서도 같은 효과를 낼 수 있다고는 하는데, 항상 그럴 수 있을리가 없다. 대신 여기서는 아파치의 [http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html mod_rewrite 모듈]을 사용한다. 이것도 서버에 따라 설치되어 있지 않은 경우가 있을지 모르겠는데, 적어도 주인장이 쓰는 서버에는 설치되어 있더라 :-) === # .htaccess 수정 === /home/gypark/public_html/.htaccess 파일에 다음과 같은 내용을 집어넣는다. (좌측 행번호는 편의상 넣은 것임) {{{#!vim apache number
RewriteEngine On RewriteRule ^wiki(/.*)?$ /cgi-bin/wiki/wiki.pl$1 [L]
}}} 1번째 줄과 4번째 줄은, mod_rewrite 모듈이 있을 때만 사이에 있는 내용을 수행하라는 얘기. 2번째 줄은 저 모듈이 동작하도록 스위치를 켜는 거고, 3번째 줄이 핵심인데, 다음과 같은 식으로 구성되며: {{{ RewriteRule 패턴 치환문자열 [옵션(없어도 됨)] }}} 패턴은 [[정규표현식]]을 쓸 수 있다. 위의 경우 "^"는 라인의 시작, 괄호 (,)는 그룹, "."는 임의의 문자 하나, "*"는 "0개 이상" (따라서 ".*"는 null string을 포함한 임의의 문자열), "?"는 "없거나 1개 있거나" (이 물음표는 왼쪽 괄호쌍에 걸린다), "$"는 라인의 끝을 의미한다. 치환문자열에는 그냥 단순한 문자열이 들어가는데, 몇 가지 변수를 쓸 수 있다. 위의 "$1"은 "좌측 패턴에서 1번째 그룹"을 가리킨다. 브라우저의 요청을 검사하여서 저 패턴에 일치하는 부분이 있으면 그 부분을 치환문자열로 교체한 후에 넘겨 준다. 이 때 제일 끝의 옵션 [L]은 저 룰에 의해 치환이 일어났으면 그 아래에 있는 룰들을 무시하고 빠져나가라는 얘기인데, 지금은 그 아래에 다른 룰이 더 없으니 있으나 마나겠다. RewriteRule의 자세한 설명은 [http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#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 |< _ || === # 위키 쪽의 수정 === 이제 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=""안에 이제는 절대 경로가 들어가도록 해야 한다.
==== # 다른 페이지 또는 액션 링크 ==== 내가 원하는 건 이런 링크들도 다 "gypark.pe.kr/wiki/" 형식으로 링크가 걸리는 것이다. 이 것은 환경설정 변수 중에 $FullUrl에 적어 준다. {{{#!vim perl $FullUrl = "http://gypark.pe.kr/wiki"; # 이렇게 도메인 명까지 적어 주던가 $FullUrl = "http:/wiki"; # (X) 여기와 아래처럼 도메인 명을 안 쓸 경우 RSS 출력 등에서 문제가 된다. $FullUrl = "/wiki"; # (X) }}} 페이지나 액션을 링크하는 것은 위키 소스 내에서 "$ScriptName" 변수가 사용된다. 그리고 이 변수는 FullUrl의 값이 없으면 적절한 상대경로로 값이 정해지고, 있으면 FullUrl의 값을 그대로 사용한다
. ==== # 스타일쉬트, 자바스크립트 등 ==== $ScriptName 변수를 쓰지 않고 주소를 표시하는 것들이 있다. 대표적으로 스타일 쉬트가 그렇다. 이런 건... 별 도리 없이 일일이 환경설정 변수를 고쳐 주어야 한다. {{{#!vim perl # 스타일 쉬트 URL $StyleSheet = "http://gypark.pe.kr/cgi-bin/wiki/wiki.css"; # (O) $StyleSheet = "http:/cgi-bin/wiki/wiki.css"; # (O) $StyleSheet = "/cgi-bin/wiki/wiki.css"; # (O) 스타일쉬트의 경우는 http: 를 안 적어줘도 상관없다. 다른 변수들도 거의 그런데, # 항상 그런다는 보장도 없으니 웬만하면 첫번째나 두번째가 나아 보임 # 로고 이미지 URL $LogoUrl = "/raymundo_logo.jpg"; # 아이콘 URL $IconDir = "/cgi-bin/wiki/icons/"; # 업로드 URL $UploadUrl = "http:/pub/gyparkwiki/upload"; # 이 변수는 http: 가 꼭 있어야 함 # 주의: $UploadDir 은 내부에서 쓰는 것이고, 잘 동작하고 있었다면 고치면 안 된다 # 인터위키 아이콘 URL $InterIconDir = "/cgi-bin/wiki/icons-inter/"; # 자바스크립트 파일 URL $JavaScript = "/cgi-bin/wiki/wikiscript.js"; # 오에카키 .jar 파일 URL $OekakiJar = "/cgi-bin/wiki/oekakibbs.jar"; # 이모티콘 아이콘 URL $EmoticonPath = "/cgi-bin/wiki/emoticon/"; }}} 으음... 기존에 소스를 수정할 당시에 이런 날이 올 걸 예상하지 못하는 바람에, 브라우저에 노출되는 URL과, 위키 스크립트가 내부적으로 쓰는 디렉토리 이름들을 구분해 놓지 않아서, 사실 정확히 필요한 변수를 다 챙기기 힘들다. 이 외에도 누락된 게 있을지도 모름 =.=; === # 관련 문서 === * [http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html mod_rewrite 모듈] * Jof:UseModWiki소스수정/위키이름없이동작하게하기 - 서버가 지원해주면 이렇게도 할 수 있음 === # Comments ===
역시 마찬가지로... 제 홈을 방문하시는 분들은 웬만하면 북마크나 RSS등을 새로 지정해 주시고.. ([[최근변경내역]] 링크나 RSS 링크들도 "gypark.pe.kr/wiki/***" 형태로 바뀌어 있습니다) 혹시 뭔가 안 되는게 보이시면 알려 주시면 정말 감사하겠습니다 ^_^
질문이.. 기존 링크로 들어오는 것은 그대로 보여지는 건가요?
아 그대로 보여지는군요.
Alias류는 URL을 file-path로 보내므로 여타 디렉토리에 의존한 path들이 다 깨질 우려가 있습니다.
: 오 그런가요. 좋은 정보 감사합니다~ ^^
----
---- [[주인장분류]] [[위키위키분류]] [[컴퓨터분류]]
홈페이지주소간단히하기
페이지로 돌아가기 |
다른 수정본 보기