-
- 1. 스크립트 이름과 뒤의 인자 사이에 들어오는 구분자를 ? 와 / 중에 선택 가능
-
-
- 1.1. 사용법
-
- 1.2. 부작용
-
- 1.3. config.pl 수정
-
- 1.4. wiki.pl 수정
-
- 1.5. wiki.pl 이외의 소스 수정
-
- 1.6. 추가 업데이트 내역
-
- 1.7. 사용자 의견
-
1. 스크립트 이름과 뒤의 인자 사이에 들어오는 구분자를 ? 와 / 중에 선택 가능
UseModWiki 1.0 의 코드를 사용하여 /RSS제공 패치를 하다보니 어쩔 수 없이 하게 된 패치..
config 화일에 다음의 환경 변수를 추가한다.
$SlashLinks = 0;
이 값이 0 이면 wiki.pl?action 으로, 1 이면 wiki.pl/action 으로 링크가 걸린다.
그런데 이 옵션을 1로 하는 경우는 추가의 조치가 필요하다. 브라우저가 "wiki.pl/페이지이름(또는 action등)"의 형식으로 요청을 보냈을 때 처리할 수 있어야 한다.
두 가지 방법이 있다:
- apache 웹서버의 mod_rewrite 를 사용해서 wiki.pl? 형태로 바꿔서 처리하게 하는 방법
- mod_rewrite를 쓸 경우는 아예 주소를 "http://도메인이름/페이지이름"과 같은 식으로 줄일 수도 있다.
- wiki.pl 스크립트가 스스로 처리하게 하는 방법
어느 쪽 방법을 쓰더라도, 위키 출력 내에 상대경로로 링크가 걸린 경우 문제가 된다. <a href="wiki.pl/주저리">이렇게 걸려 있을 때,
- "wiki/wiki.pl?페이지" 출력에서 저 링크를 보면 저 링크는 wiki/wiki.pl/주저리 가 되지만
- "wiki/wiki.pl/페이지" 출력에서 저 링크를 보면 저 링크는 wiki/wiki.pl/wiki.pl/주저리 가 된다. =.=;;;
결국 별도로 /SlashLinks처리 신경을 써 주어야 함.
그리고, wiki.pl 링크는 저렇게 해결이 되지만, 그 외의 스타일쉬트,자바스크립트 등의 경로는 여전히 이 문제가 있으므로, 절대경로로 바꿔주어야 한다. 홈페이지주소간단히하기 참조.
1.3. config.pl 수정
변수 추가
$SlashLinks = 0;
1.4. wiki.pl 수정
use vars qw(
$UserGotoBar $UserGotoBar2 $UserGotoBar3 $UserGotoBar4
...
$SlashLinks
);
함수 통채로 추가
sub ScriptLinkChar {
if ($SlashLinks) {
return '/';
}
return '?';
}
함수 수정
sub ScriptLink {
my ($action, $text) = @_;
return "<a href=\"$ScriptName" . &ScriptLinkChar() . "$action\">$text</a>";
}
함수 수정
sub ScriptLinkTitle {
my ($action, $text, $title) = @_;
if ($FreeLinks) {
$action =~ s/ /_/g;
}
return "<a href=\"$ScriptName" . &ScriptLinkChar() . "$action\" title=\"$title\">$text</a>";
}
이 외에도 ?action= 등으로 출력되게 고정된 부분을 전부 ScriptLinkChar() 를 사용하게 바꾼다. (일부는 뒤의 쿼리가 영문으로 고정되어 있어서 안 바꿔도 될 것 같긴 한데, 일관성을 위해서...)
(분량이 많아서 diff 화면으로 대신합니다. ext1.106b->ext1.107의 변화)
@@ -495,14 +495,27 @@
$q->autoEscape(undef);
###############
### added by gypark
### file upload
if ($q->cgi_error() =~ m/^413/) {
- print $q->redirect(-url=>"http:$ENV{SCRIPT_NAME}?action=upload&error=3");
+ print $q->redirect(-url=>"http:$ENV{SCRIPT_NAME}".&ScriptLinkChar()."action=upload&error=3");
exit 1;
}
$UploadUrl = "http:$UploadDir" if ($UploadUrl eq "");
@@ -858,9 +877,9 @@
print "<html>\n";
print "<title>$SiteName: $id</title>\n";
print "<frameset rows=\"$SizeTopFrame,*,$sizeBottomFrame\" cols=\"1\" frameborder=\"0\">\n";
- print " <frame src=\"$ScriptName?action=browse&InFrame=1&id=$id&oldid=$oldId\" noresize scrolling=\"no\">\n";
+ print " <frame src=\"$ScriptName".&ScriptLinkChar()."action=browse&InFrame=1&id=$id&oldid=$oldId\" noresize scrolling=\"no\">\n";
print " <frame src=\"$url\" noresize>\n";
- print " <frame src=\"$ScriptName?action=browse&InFrame=2&id=$id&oldid=$oldId\" noresize scrolling=\"no\">\n"
+ print " <frame src=\"$ScriptName".&ScriptLinkChar()."action=browse&InFrame=2&id=$id&oldid=$oldId\" noresize scrolling=\"no\">\n"
if ($EditGuideInExtern);
print " <noframes>\n";
print " <body>\n";
@@ -1569,7 +1588,7 @@
sub HelpLink {
my ($id, $text) = @_;
- my $url = "$ScriptName?action=help&index=$id";
+ my $url = "$ScriptName".&ScriptLinkChar()."action=help&index=$id";
### 작성 취소 시 확인
# return "<a href=\"javascript:help('$url')\">$text</a>";
@@ -1966,7 +1985,7 @@
### 헤더 출력 개선
$html .= qq(<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=$HttpCharset">\n);
$html .= qq(<META HTTP-EQUIV="Content-Script-Type" CONTENT="text/javascript">\n);
- $html .= qq(<link rel="alternate" type="application/rss+xml" title="$SiteName" href="http://$ENV{SERVER_NAME}$ENV{SCRIPT_NAME}?action=rss">\n);
+ $html .= qq|<link rel="alternate" type="application/rss+xml" title="$SiteName" href="http://$ENV{SERVER_NAME}$ENV{SCRIPT_NAME}${\(&ScriptLinkChar())}action=rss">\n|;
$html .= qq(<script src="$JavaScript" language="javascript" type="text/javascript"></script>);
$html .= "\n";
###
@@ -2013,7 +2032,7 @@
if ($FreeLinks) {
$id = &FreeToNormal($id);
}
- $bodyExtra .= qq( ondblclick="location.href='$ScriptName?action=edit&id=$id'" );
+ $bodyExtra .= qq| ondblclick="location.href='$ScriptName${\(&ScriptLinkChar())}action=edit&id=$id'" |;
}
}
###
@@ -2403,7 +2422,7 @@
# Normally get URL from script, but allow override.
$FullUrl = $q->url(-full=>1) if ($FullUrl eq "");
- $url = $FullUrl . "?" . $newid;
+ $url = $FullUrl . &ScriptLinkChar() . $newid;
$nameLink = "<a href=\"$url\">$name</a>";
if ($RedirType < 3) {
if ($RedirType == 1) { # Use CGI.pm
@@ -5706,12 +5725,12 @@
function upload()
{
- var w = window.open("$ScriptName?action=upload", "upload", "width=640,height=250,resizable=1,statusbar=1,scrollbars=1");
+ var w = window.open("$ScriptName${\(&ScriptLinkChar())}action=upload", "upload", "width=640,height=250,resizable=1,statusbar=1,scrollbars=1");
w.focus();
}
function oekaki()
{
- var w = window.open("$ScriptName?action=oekaki&mode=paint", "oekaki", "width=900,height=750,resizable=1,statusbar=1,scrollbars=1");
+ var w = window.open("$ScriptName${\(&ScriptLinkChar())}action=oekaki&mode=paint", "oekaki", "width=900,height=750,resizable=1,statusbar=1,scrollbars=1");
w.focus();
}
@@ -8811,7 +8834,7 @@
>
<channel rdf:about="$ChannelAbout">
<title>${\(&QuoteHtml($SiteName))}</title>
- <link>${\($QuotedFullUrl . &QuoteHtml("?$RCName"))}</link>
+ <link>${\($QuotedFullUrl . &QuoteHtml(&ScriptLinkChar()."$RCName"))}</link>
<description>${\(&QuoteHtml($SiteDescription))}</description>
<wiki:interwiki>
<rdf:Description link="$QuotedFullUrl">
@@ -8881,10 +8904,10 @@
### replaced by gypark
### 북마크
# $diffPrefix = $QuotedFullUrl . &QuoteHtml("?action=browse\&diff=4\&id=");
- $diffPrefix = $QuotedFullUrl . &QuoteHtml("?action=browse\&diff=5\&id=");
+ $diffPrefix = $QuotedFullUrl . &QuoteHtml(&ScriptLinkChar()."action=browse\&diff=5\&id=");
###
###############
- $historyPrefix = $QuotedFullUrl . &QuoteHtml("?action=history\&id=");
+ $historyPrefix = $QuotedFullUrl . &QuoteHtml(&ScriptLinkChar()."action=history\&id=");
foreach $rcline (@outrc) {
($ts, $pagename) = split(/$FS3/, $rcline);
$pagecount{$pagename}++;
@@ -8972,7 +8995,7 @@
$host =~ s/\d+$/xxx/;
if ($userName) {
$author = &QuoteHtml($userName);
- $authorLink = "link=\"$QuotedFullUrl?$author\"";
+ $authorLink = "link=\"$QuotedFullUrl".&ScriptLinkChar()."$author\"";
} else {
$author = $host;
}
@@ -8988,7 +9011,7 @@
$item = <<RSS ;
<item rdf:about="$itemID">
<title>$pagename</title>
- <link>$QuotedFullUrl?$encoded_pagename</link>
+ <link>$QuotedFullUrl${\(&ScriptLinkChar())}$encoded_pagename</link>
<description>$description</description>
<dc:date>$date</dc:date>
<dc:creator>$author</dc:creator>
1.5. wiki.pl 이외의 소스 수정
wiki.pl 코드 말고, macros/ action/ plugin/ 디렉토리에 있는 코드들 중에 "?"를 출력하게 고정된 부분이 있으면 수정한다.
ext1.107 현재 고칠 것은 /Calendar매크로와 /blog매크로시리즈의 blog_calendar 매크로 두 개 뿐. macros/ 디렉토리 아래 있는 blog_calendar.pl 과 calendar.pl 을 수정한다. 각각 두 군데를 고쳐주면 된다.
blog_calendar.pl (diff):
@@ -86,7 +86,7 @@
# 달력 제목 출력
$result .= "<TABLE class='calendar'>";
$result .= "<CAPTION class='calendar'>"
- ."<a href=\"$ScriptName?$toc_mainpage/$cal_year-$cal_month\">"
+ ."<a href=\"$ScriptName".&ScriptLinkChar()."$toc_mainpage/$cal_year-$cal_month\">"
.(length($toc_mainpage)?"$toc_mainpage<br>":"")
."$cal_year-$cal_month"
."</a>"
@@ -148,7 +148,7 @@
}
$result .= "<td class='$td_class'>"
- .(($page)?"<a href=\"$ScriptName?$page\" title=\"$pagename\">":"")
+ .(($page)?"<a href=\"$ScriptName".&ScriptLinkChar()."$page\" title=\"$pagename\">":"")
."<span style='color:$cal_color[$wday]; $span_style'>"
.$cal_result
."</span>"
calendar.pl (diff):
@@ -77,7 +77,7 @@
# 달력 제목 출력
$result .= "<TABLE class='calendar'>";
$result .= "<CAPTION class='calendar'>"
- ."<a href=\"$ScriptName?$cal_mainpage$cal_year-$cal_month\">"
+ ."<a href=\"$ScriptName".&ScriptLinkChar()."$cal_mainpage$cal_year-$cal_month\">"
.(length($cal_mainpage)?"$cal_mainpage<br>":"")
."$cal_year-$cal_month"
."</a>"
@@ -132,7 +132,7 @@
}
$result .= "<td class='$td_class'>"
- ."<a href=\"$ScriptName?$cal_mainpage$cal_page\">"
+ ."<a href=\"$ScriptName".&ScriptLinkChar()."$cal_mainpage$cal_page\">"
."<span style='color:$cal_color[$wday]; $span_style'>"
.$cal_result
."</span></a></td>";
1.6. 추가 업데이트 내역
ext1.106b
- ScriptLinkTitle 함수도 SlashLinks 옵션의 적용을 받도록 수정.
ext1.107
- 코드의 나머지 부분에서 "?" 출력을 하는 곳을 찾아서 바꿈
ext1.109a
- 페이지 제목을 클릭해서 보는 역링크 목록도 SlashLinks 사용의 영향을 받는 터라 코드가 수정되었습니다. /역링크 페이지를 참조하세요.
신경써서 찾는다고 찾았는데, 그 외에도 "wiki.pl?" 로 출력되게 고정되어 있는 코드를 찾게 되시면 알려주세요~ 근데 코드를 들여다보실 만한 분이 안 계시려나요 ^^
@@ -8544,9 +8567,9 @@ 부분에 제 위키소스엔 없어요
- 그건 /오에카키 관련 소스라서... 바벨을 보니 예전에 PaintBBS.jar 쓰시던 코드로 남아 있네요. 오에카키 쓸 일 없으시면 그냥 놔둬도 될테고... OekakiSave, OekakiExit, OekakiPaint 세 함수를 통채로 최신 버전에서 복사해서 덮어 쓰셔도 될 겁니다.
음, 환경변수의 갯수가 늘어나니 관리하고도 힘들고 해서 웬만하면 추가하지 않으려고 했는데, 오에카키 jar 파일은 도저히 답이 없네요. 오에카키 관련 소스 수정은 /오에카키 쪽으로 옮겼습니다. 잠시 후 그쪽은 또 업데이트가 있을 예정 =.=
위키위키분류