[trick-with-Wiki] トップ 差分 一覧 Farm ソース 検索 ヘルプ RSS ログイン

ページを固定URLに

カテゴリ[fswiki]

mod_rewriteを使って、どうにかできないかともがいてたら、一応、出来たようなので。farmにも対応。(これが難しかった。。。)

まず、wiki/dir_name/ によるアクセスのために、index.cgi に改名しておく。
さらに、setup.dat 内で script_name = ./ としておく。

.htaccess

<FilesMatch "\.(pm|dat|wiki|log)$">
 deny from all
</FilesMatch>

RewriteEngine on
RewriteBase /wiki
RewriteRule ^(.+)/([^/]+)\.html$ index.cgi/$1?page=$2 [NS,L]
RewriteRule ^(.+)/$ index.cgi/$1 [NS,L]
RewriteRule ^([^/]+)\.html$ index.cgi?page=$1 [NS,L]

index.cgi (元、wiki.cgi)

***************
*** 63,69 ****
  		$wiki->redirectURL($cgi->url().$path_info);
  	}
  	$path_info =~ m</([^/]+)$>;
! 	$wiki->config('script_name', $1);
  	$wiki->config('data_dir'   , $wiki->config('data_dir'  ).$path_info);
  	$wiki->config('config_dir' , $wiki->config('config_dir').$path_info);
  	$wiki->config('backup_dir' , $wiki->config('backup_dir').$path_info);
--- 63,69 ----
  		$wiki->redirectURL($cgi->url().$path_info);
  	}
  	$path_info =~ m</([^/]+)$>;
!# 	$wiki->config('script_name', $1); #comment out
  	$wiki->config('data_dir'   , $wiki->config('data_dir'  ).$path_info);
  	$wiki->config('config_dir' , $wiki->config('config_dir').$path_info);
  	$wiki->config('backup_dir' , $wiki->config('backup_dir').$path_info);

lib/Wiki/HTMLParser.pm

%2F問題を回避するのに参考にさせていただきました。[http://sheepman.parfait.ne.jp/wiki/RewriteRule]

***************
*** 421,427 ****
  		$name = $page;
  	}
  	if($self->{wiki}->page_exists($page)){
! 		return "<a href=\"".$self->{wiki}->config('script_name')."?page=".&Util::url_encode($page)."\" class=\"wikipage\">".
  		       &Util::escapeHTML($name)."</a>";
  	} else {
  		return "<span class=\"nopage\">".&Util::escapeHTML($name)."</span>".
--- 421,429 ----
  		$name = $page;
  	}
  	if($self->{wiki}->page_exists($page)){
!     my $escape_slash = &Util::url_encode($page);
!     $escape_slash =~ s|%2F|%252F|;
! 		return "<a href='".$escape_slash.".html' class='wikipage'>".
  		       &Util::escapeHTML($name)."</a>";
  	} else {
  		return "<span class=\"nopage\">".&Util::escapeHTML($name)."</span>".

lib/Wiki.pm

***************
*** 1283,1289 ****
  	# Locationタグでリダイレクト
  	if($self->config('redirect')==1){
  		my ($hoge,$param) = split(/\?/,$url);
! 		$url = $self->get_CGI->url().$self->get_CGI()->path_info();
  		if($param ne ''){
  			$url = "$url?$param";
  		}
--- 1286,1292 ----
  	# Locationタグでリダイレクト
  	if($self->config('redirect')==1){
  		my ($hoge,$param) = split(/\?/,$url);
! 		$url = $self->get_CGI->url();
  		if($param ne ''){
  			$url = "$url?$param";
  		}

さらに

ページ名とページタイトルを別々に設定するという仕様にしてみたり。
このページがそうなってます。
ページの先頭に ///タイトル を書くと、自動的に別名リンクになるという仕組。
こっちはパッチを上げときました。 lib_Wiki_patch.diff(398)

TrackBack

TrackBack URL for this entry:
http://wiki.trick-with.net/PermanetURL.html/PermanetURL
  • FSWikiなのに - ゆ〜ろ (04/08/27 12:51)
  • FSWikiなのに恐ろしく軽いページだなぁ。。。と思っていたら見てたんですが、特別な改造をいれてるんでしょうか? - ゆ〜ろ (04/08/27 12:55)
  • ただ単純にIEで表示されているURLが .html になっているだけで、サーバーが超高速なんでしょうか? - ゆ〜ろ (04/08/27 12:56)
お名前: コメント: