4月 7th, 2008at 15:48

Tags: ,

Pukiwiki1.4.6を静的URLに改造

このエントリーをはてなブックマークに追加

作成中ですわ

Pukiwikiのような無限にページを作成するサイトは検索エンジンに登録されにくいらしい(参考:Pukiwiki SEO)。
そこで、URLを偽装するロジックを入れてみる。

以下のページを元にやってみたんだけど、Pukiwiki1.4.6や1.4.7ではうまくいかなかった。どうも2つのページでやってることをあわせてやらないといけないみたい。

願望 

  • index.phpもURLから消したいんだけど、pukiwiki.ini.phpの$script_directory_indexとか$scriptを修正してもうまくいかないので調査しないと。

PHPファイルの修正 

以下にだらだら書いてあるけどskin/pukiwiki.skin.phpとpukiwiki.ini.php以外を上げときます。

files.zip

lib/init.php

以下の部分を

/////////////////////////////////////////////////// QUERY_STRINGを取得

// cmdもpluginも指定されていない場合は、QUERY_STRINGを// ページ名かInterWikiNameであるとみなす$arg = '';if (isset($_SERVER['QUERY_STRING']) && $_SERVER['QUERY_STRING']) {    $arg = & $_SERVER['QUERY_STRING'];} else if (isset($_SERVER['argv']) && ! empty($_SERVER['argv'])) {    $arg = & $_SERVER['argv'][0];}

下みたいに修正

/////////////////////////////////////////////////// QUERY_STRINGを取得

// cmdもpluginも指定されていない場合は、QUERY_STRINGを// ページ名かInterWikiNameであるとみなす$arg = '';if (isset($_SERVER['QUERY_STRING']) && $_SERVER['QUERY_STRING']) {    $arg = & $_SERVER['QUERY_STRING'];} else if (array_key_exists('PATH_INFO',$_SERVER) and $_SERVER['PATH_INFO'] != '') {        $arg = preg_replace("/^\/*(.+)\.html\/*$/","$1",$_SERVER['PATH_INFO']);} else if (isset($_SERVER['argv']) && ! empty($_SERVER['argv'])) {    $arg = & $_SERVER['argv'][0];}

lib/make_link.php

先頭に以下の関数を入れる。

function rurlencode($uri) {   $parts = explode('/', $uri);   for ($i = 0; $i < count($parts); $i++) {     $parts[$i] = rawurlencode($parts[$i]);   }   return implode('/', $parts);}

set関数の

$this->url = ($url === FALSE) ?    $script . '?' . rawurlencode('[[' . $name . ':' . $this->param . ']]') :

を以下に修正

$this->url = ($url === FALSE) ?    $script . '/' . rurlencode('[[' . $name . ':' . $this->param . ']]') :    htmlspecialchars($url);

make_pagelink関数の中の

$r_page  = rawurlencode($page);

$r_page  = rurlencode($page);

に修正(エイリアス向けの修正)。さらに

return $al_left . '<a ' . 'href="' . $script . '?' . $r_page . $anchor .    '"' . $title . '>' . $s_alias . '</a>' . $al_right;

を以下に修正。

return $al_left . '<a ' . 'href="' . $script . '/' . $r_page . '.html' . $anchor .    '"' . $title . '>' . $s_alias . '</a>' . $al_right;

lib/html.php 

catbody関数内の

$_LINK['top']      = "$script?" . rawurlencode($defaultpage);

を以下に修正。

$_LINK['top']      = "$script";

make_related関数の中の

$_links[] = $tag ?    '<a href="' . $script . '?' . $r_page . '" title="' .    $s_page . ' ' . $passage . '">' . $s_page . '</a>' :    '<a href="' . $script . '?' . $r_page . '">' .    $s_page . '</a>' . $passage;

を以下に修正。

$_links[] = $tag ?    '<a href="' . $script . '/' . $r_page . '.html" title="' .    $s_page . ' ' . $passage . '">' . $s_page . '</a>' :    '<a href="' . $script . '/' . $r_page . '.html">' .    $s_page . '</a>' . $passage;

lib/func.php 

do_search関数の中の

$r_page  = rawurlencode($page);

以下に修正。

$r_page  = rurlencode($page);

以下の部分を

$retval .= ' <li><a href="' . $script . '?cmd=read&amp;page=' .    $r_page . '&amp;word=' . $r_word . '">' . $s_page .    '</a>' . $passage . '</li>' . "\n";

以下に修正。

$retval .= ' <li><a href="' . $script . '/' .    $r_page . '.html">' . $s_page .    '</a>' . $passage . '</li>' . "\n";

page_list関数の以下の部分を

if ($cmd == 'read') {    $href = $script . '?';} else {    $href = $script . '?cmd=' . $cmd . '&amp;page=';}

以下に修正。

if ($cmd == 'read') {    $href = $script . '/';} else {    $href = $script . '?cmd=' . $cmd . '&amp;page=';}

以下の部分を

$r_page  = rawurlencode($page);

以下修正。

$r_page  = rurlencode($page);

以下の部分を

$str = '   <li><a href="' . $href . $r_page . '">' .    $s_page . '</a>' . $passage;

以下に修正。

$str = '   <li><a href="' . $href . $r_page . '.html">' .    $s_page . '</a>' . $passage;

skin/pukiwiki.skin.php 

スタイルシートの部分を

<link rel="stylesheet" type="text/css" media="screen" href="skin/pukiwiki.css.php?charset=<?php echo $css_charset ?>" charset="<?php echo $css_charset ?>" /><link rel="stylesheet" type="text/css" media="print"  href="skin/pukiwiki.css.php?charset=<?php echo $css_charset ?>&amp;media=print" charset="<?php echo $css_charset ?>" />

絶対パスに修正。

<link rel="stylesheet" type="text/css" media="screen" href="http://daipresents.com/fujiwiki/skin/pukiwiki.css.php?charset=<?php echo $css_charset ?>" charset="<?php echo $css_charset ?>" /><link rel="stylesheet" type="text/css" media="print"  href="http://daipresents.com/fujiwiki/skin/pukiwiki.css.php?charset=<?php echo $css_charset ?>&amp;media=print" charset="<?php echo $css_charset ?>" />

メニューなんかに出てくるリンクを

<a href="<?php echo $link['top'] ?>"><img id="logo" src="<?php echo IMAGE_DIR . $image['logo'] ?>" width="80" height="80" alt="[PukiWiki]" title="[PukiWiki]" /></a>

とりあえず修正。

<a href="<?php echo $script ?>"><img id="logo" src="<?php echo IMAGE_DIR . $image['logo'] ?>" width="80" height="80" alt="[PukiWiki]" title="[PukiWiki]" /></a>

ページのタイトル部分を

<h1 class="title"><?php echo $page ?></h1>

とりあえず修正。

<h1 class="title"><?php echo make_pagelink($title, '', '', $page, TRUE) ?></h1>

リンクが表示される部分を

<?php if ($is_page) { ?> <?php if(SKIN_DEFAULT_DISABLE_TOPICPATH) { ?>   <a href="<?php echo $link['reload'] ?>"><span class="small"><?php echo $link['reload'] ?></span></a> <?php } else { ?>   <span class="small">   <?php require_once(PLUGIN_DIR . 'topicpath.inc.php'); echo plugin_topicpath_inline(); ?>   </span> <?php } ?><?php } ?>

とりあえず修正。

<?php if ($is_page) { ?> <?php if(SKIN_DEFAULT_DISABLE_TOPICPATH) { ?>   <a href="<?php echo $script . '/' . $title . '.html' ?>"><span class="small"><?php echo $script . '/' . $title . '.html' ?></span></a> <?php } else { ?>   <span class="small">   <?php require_once(PLUGIN_DIR . 'topicpath.inc.php'); echo plugin_topicpath_inline(); ?>   </span> <?php } ?><?php } ?>

pukiwiki.ini.php

画像パスを

define('IMAGE_DIR', 'image/');

絶対パスに修正。

define('IMAGE_DIR', 'http://daipresents.com/fujiwiki/image/');

plugin/recent.inc.php 

recentプラグインみたいなリンクを作るプラグインは全部修正しなければならない。ので、使うやつだけ修正していく。

$r_page = rawurlencode($page);

$r_page = rurlencode($page);

に修正。

リンク作成部分を、

$items .= ' <li><a href="' . $script . '?' . $r_page . '"' .     ' title="' . $s_page . $passage . '">' . $s_page . '</a></li>' . "\n";

以下のように修正。

$items .= ' <li><a href="' . $script . '/' . $r_page . '.html"' .     ' title="' . $s_page . $passage . '">' . $s_page . '</a></li>' . "\n";

plugin/topicpath.inc.php

plugin_topicpath_inline関数内の以下の部分を

$landing  = rawurlencode($_landing);

以下に修正。

$landing  = rurlencode($_landing);

以下の部分を

// Page exists or not exists$topic_path[] = '<a href="' . $script . '?' . $landing . '">' . $element . '</a>';

以下に修正。

// Page exists or not exists$topic_path[] = '<a href="' . $script . '/' . $landing . '.html">' . $element . '</a>';

plugin/ls2.inc.php

plugin_ls2_get_headings関数の

$r_page = rawurlencode($page);

を以下に修正。

$r_page = rurlencode($page);

以下の部分を

$href   = $script . '?cmd=read&amp;page=' . $r_page;

以下に修正。

$href   = $script . '/' . $r_page . '.html';

plugin/aname.inc.php 

plugin_aname_tag関数の

$url     = $f_full  ? get_script_uri() . '?' . rawurlencode($vars['page']) : '';if ($body != '') { $href  = ' href="' . $url . '#' . $id . '"';

を以下に修正

$url     = $f_full  ? get_script_uri() . '/' . rurlencode($vars['page']) : '';if ($body != '') { $href  = ' href="' . $url . '.html#' . $id . '"';

を以下に修正

このエントリーをはてなブックマークに追加