作成中ですわ
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以外を上げときます。
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&page=' .
$r_page . '&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 . '&page=';
}
以下に修正。
if ($cmd == 'read') {
$href = $script . '/';
} else {
$href = $script . '?cmd=' . $cmd . '&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 ?>&media=print" charset="<?php echo $css_charset ?>" />
絶対パスに修正。
<link rel="stylesheet" type="text/css" media="screen" href="//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="//daipresents.com/fujiwiki/skin/pukiwiki.css.php?charset=<?php echo $css_charset ?>&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', '//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&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 . '"';
を以下に修正