質問箱/2443

カテゴリ
サマリURLの短縮 / URLの出力を(絶対パスではなく)相対パスにする可能性について
バージョン1.4.3
投稿者バイズ?
状態完了
投稿日2004-11-19 (金) 16:49:11

質問

最近では社内の Wiki を HTML に保存し外部向け提供する必要がでてきました。外部向けのページにナビゲーション・バーやロゴなどを表示させない方法としてスキンを以下のように編集しました:

 <link rel="stylesheet" href="skin/default.ja.css" type="text/css" media="screen" charset="Shift_JIS" />
<?php if (isset($_GET['external']) and ($_GET['external'] == 'yes')) { ?>
 <link rel="stylesheet" href="skin/print.ja.css" type="text/css" media="screen" charset="Shift_JIS" />
<?php } ?>
<div id="navigator">
<?php if ($is_page) { ?>
(略)
 | <a href="<?php echo "$script?&external=yes&cmd=read&page=$r_page" ?>">外部向けページ</a> ]

今の問題は、ページにあるリンクの大半がフル URL*1 になっているため、保存されたファイルにあるリンクをクリックすると社内のサーバーに飛んでしまう事です。

Wiki のリンク出力を相対 URL*2 にする事はできるのでしょうか。

回答

  • 保存したHTMLの中のURLをエディタ等で置換したほうが手っ取り早いような。 -- 2004-11-19 (金) 17:17:09
    • それはもっともの事ですが、「テキストエディタで置換する」知識さえないスタッフだと難しいので…やった事はないですが、仮にすべての .php ファイルに対し $script を削除しても問題ないのでしょうか。 -- バイズ? 2004-11-19 (金) 17:38:30
  • pukiwiki.ini.phpで$scriptを設定してみてはどうでしょうか。こんな感じで。 -- teanan 2004-11-19 (金) 18:30:24
    $script = './';
    • htmlにするとだめですね、失礼しました。 (^^; -- teanan 2004-11-19 (金) 18:37:31
  • 「出力のリンクを相対URLに」しなくとも、この問題は解決できないでしょうか? pukiwiki.ini.phpで、
    if ( 内部 ) { // REMOTE_ADDRやREMOTE_HOSTで判別
      $script = 'http://inside.example.org/pukiwiki.php;'
      $extern = false;
    } else {
      $script = http://outside.example.org/pukiwiki.php;
      $extern = true;
    }
    と思ったら、「保存し外部向け提供する」でしたか…失礼。となると、置換スクリプトを用意するのが妥当な線ですかね。$scriptの部分は固定、<title>からページ名を拾い、リンクの$script?rawurlencode(ページ名)を削除というような簡単なもので。 -- 2004-11-19 (金) 20:30:29
  • 私自身は使った事がないので、よく分からないのですが HTML に保存というと、 自作プラグイン/snapshot.inc.php がありますね。 -- にぶんのに 2004-11-21 (日) 07:06:15
  • みな様のアドバイス・アイデアを頂き本当にありがとうございます。ユーザーがどのブラウザでどの形式に保存するかを限定する事が難しいので $script を含む .php ファイルを編集するしかないなぁと最初思いました。が、ただ今スキンに条件判定→リンクの置換処理を入れたら良いではないかと思って試したらやりたい事ができました。まだ練りが必要だと思いますが一応スキンに修正した箇所をリストします: stylesheet に条件判定
    <link rel="stylesheet" href="skin/default.ja.css" type="text/css" media="screen" charset="Shift_JIS" />
    <?php if (isset($_GET['external']) and ($_GET['external'] == 'yes')) { ?>
     <link rel="stylesheet" href="skin/print.ja.css" type="text/css" media="screen" charset="Shift_JIS" />
    <?php } ?>
    <div id="navigator"> にリンクを追加
    <div id="navigator">
    <?php if ($is_page) { ?>
    (略)
     | <a href="<?php echo "$script?&external=yes&cmd=read&page=$r_page" ?>">外部向けページ</a> ]
    外部向けページの場合ページ内リンクを置換するように
    <?php if (isset($_GET['external']) and ($_GET['external'] == 'yes')) { ?>
        <div id="body"><?php echo ereg_replace("href=\"[^\"]+$r_page#", 'href="#', $body) ?></div>
    <?php } else { ?>
        <div id="body"><?php echo $body ?></div>
    <?php } ?>
    これで HTML 自体は望む形になりましたが、ブラウザによって保存されたページは様々でまだ本件と別の問題が残っています。例えば、IE だとページ内リンクだとしても全部フルリンクに変換したり、Mozilla だと &ref(); を使った画像が IE で表示されなかったり*3。本当は外部向けページを別の .php ファイルでダウンロードツールを走り→HTML を zip してスタッフがすぐにダウンロードできる形のが一番混乱が起きなさそうだよね…これについての可能性を後日研究しますので、なにか発見する事ができたらまたお知らせ致します。みな様ありがとうございました。 -- バイズ? 2004-11-22 (月) 10:49:45
  • 関連: dev:BugTrack2/213 相対/絶対 URI について($script、get_script_uri等) -- 2009-08-24 (月) 15:15:28

*1 <a class="hogehoge" id="hogehoge" href="http://www.hogehoge.com/index.php?hogehoge#hogehoge" title="hogehoge">ページ内リンク</a>
*2 <a class="hogehoge" id="hogehoge" href="#hogehoge" title="hogehoge">ページ内リンク</a>
*3 保存された画像の拡張子が .txt になっているせいか

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-08-24 (月) 15:15:29
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.200 sec.

OSDN