Top/PukiWiki/改造/静的コンテンツに偽装/ページ/コメント

コメントはてなブックマーク

編集編集はこちら
  • バイズ at 2004-10-06 (水) 19:04:35

    こんばんは。これは、Linux だけのやり方なのでしょうか。

    今は Windows 2000 上で「HTMLに偽装」と「ディレクトリに偽装」を両方試しました。英語の WikiName だとどの方法でも上手くいきますが、日本語の WikiName になると forbidden エラーになります。Pukiwiki のバージョンは 1.4.3 です。

    • でぃあばぁ(管理者) at 2004-10-06 (水) 19:36:55

      こんばんは :)
      まず、この Tips は PukiWiki1.4.4 用なので 1.4.3 で動作するかどうかは未確認です。ご了承下さい。
      ともあれ以下の手順で確認することをおすすめします。
      なお、日本語がエンコードされていないような参照方法 (cubic9.com/ヘルプ.html) は様々な問題が絡んできますので、考慮しません。通常、PukiWiki上のリンク先はエンコードされているので、問題ないでしょう。

      1. 「HTMLに偽装」のみを適用した状態に戻す。
      2. 「ヘルプ」にアクセスし、index.php? を消し、 末尾に .html をつけたURLでアクセスできるか確認する。
      3. アクセスできる場合
        PHPスクリプトの修正ミスの可能性が高いです。
        作業手順を確認して下さい。
      4. アクセスできない場合
        Apacheのエラーログ(error_log)で、リクエストしたURLが
        どのようなURLに書き換えられているか確認して下さい。
        この場合は.htaccessの記述ミスが考えられます。
    • バイズ at 2004-10-07 (木) 00:50:27

      でぃあばぁさん、こんばんは :)
      この手順は 1.4.4 照準の事を気づいていませんでした、すみません ^^;
      この機能を Windows を導入したいので Linux のためでも運を試したかったのです。今は自宅のパソコンに 1.4.4 を入れて試してみようと思います。
      /ヘルプ.html へはアクセスできませんでした。Windows 上では IE を使うと UTF-8 か SHIFT-JIS でしか未エンコードの URL を送信できないので。Apache のエラーログを参照するアドバイスはとても実践的で助かります。
      またいろいろ試してみます。

      ありがとうございました :)

    • でぃあばぁ(管理者) at 2004-10-07 (木) 07:22:05

      IE はそういう仕様なんですね。参考になります。あ。書き忘れてましたが、4.の場合 RewriteLogディレクティブで書き換えの様子がロギングできるので、こちらも試してみて下さいね :)

  • Logue at 2004-10-19 (火) 20:27:45

    うーん。できれば一番外側の/は.htmlにしたい。ディレクトリが深いとGoogleのページランクが下がっちゃいます。

  • Logue at 2004-10-19 (火) 20:29:07

    このページを例に取ると、こうなるみたいな:http://cubic9.com/PukiWiki/%B2%FE%C2%A4/SEO%C2%D0%BA%F6.html

  • Logue at 2004-10-21 (木) 20:53:24

    結局全部自分でやっちゃったんですけど、やってて思ったのはFrontPage?をindexに改名したほうが、スマートなのでは?って思いました。http://logue.xrea.jp/ところで、自分でもいろいろと検索してみると、Su-Jineというサイトに結構詳しく書いてありました。

    • でぃあばぁ(管理者) at 2004-10-21 (木) 21:55:02

      うちの話ではなくてPukiWiki一般の話としてですね。mod_rewriteでHTMLに偽装すれば、 example.com/pukiwiki/ や example.com/pukiwiki/index.html が example.com/pukiwiki/index.php?index にリライトされてバッチリと。確かにこちらの方がindex.phpをDirectoryIndexディレクティブに入れる必要もなくなり、自然な気がします。FrontPageはどこから来たんでしょうね。YukiWikiかな?
      Su-Jineさんはたまに斜め読みさせていただいてます :)

  • Logue at 2005-03-01 (火) 01:45

    なんか、最近ヒットが悪くなったなぁと思っていたら、末尾の/が抜けると404になっていたことがわかりました。このサイトでは、どうやってリダイレクトさせていますか?

    • でぃあばぁ(管理者) at 2005-04-16 (土) 00:45

      現在のcubic9.comのApacheの設定は以下のようになっていて、一番下のslash.phpで無理やり補完をかけてます (^^;

      RewriteEngine on
      RewriteOptions MaxRedirects=1
      RewriteBase /
      
      # 実ファイルがある場合
      RewriteCond %{REQUEST_FILENAME} -f [OR]
      RewriteCond %{REQUEST_FILENAME} -d
      RewriteRule ^.* - [L]
      
      # 「階層化とAutoLinkを両立」関連
      RewriteRule ^\*/(.+)/$ index.php?plugin=search_redirect&word=$1 [L]
      
      # Blog
      RewriteRule ^Blog/(20[0-9]{2}-[01][0-9])/$ index.php?plugin=calendar_viewer&date=$1 [L]
      
      # 肝
      RewriteRule ^(.+)/$ index.php?$1 [L]
      
      # 添付ファイル
      RewriteRule ^(.+)/attach/thumb/([^\.]+)_(.+)_([0-9]+)x([0-9]+)\..+$ index.php?plugin=attach&thumb=$2.$3&refer=$1&width=$4&height=$5 [L]
      RewriteRule ^(.+)/attach/([^/]+)$ index.php?plugin=attach&openfile=$2&refer=$1 [L]
      
      # RSS
      RewriteRule ^index\.rdf$ index.php?cmd=rss10pp [L]
      
      # 後方互換
      RewriteRule ^(.+)\.html$ index.php?$1 [L]
      
      # /の補完をしてみる
      RewriteRule ^.+$ test/assist/slash.php?$0 [L]

      slash.phpの中身はこんな感じです。サニタイズしてスラッシュを付加するだけのPHPです。場当たり的過ぎますよねぇ (^^;

      $arg = input_filter($_SERVER['QUERY_STRING']);
      header('HTTP/1.1 301 Moved Permanently');
      header('Location: /'.anchor_replace(rawurlencode($arg)).'/');
  • at 2005-04-04 (月) 01:13

    店 という名前のページを作ると、他ページからのリンクが聞かなくなるのですが

    • at 2005-04-04 (月) 01:14

      IEでは問題なく、Mozila系でのみ出る問題のようです。

      • でぃあばぁ(管理者) at 2005-04-16 (土) 01:38

        ウチの環境だとIEでも確認できます。時間がかかるかもしれませんが、調べてみますね。

  • しいたけ at 2005-05-07 (土) 11:59

    こんにちは。htmlに偽装した場合のパッチは1.4.5で使用することはできるのでしょうか?

    • でぃあばぁ(管理者) at 2005-05-07 (土) 12:52

      こんにちは :) 上のパッチは1.4.4専用ですので、直接1.4.5に当てることは出来ません。ただ、パッチの内部を見ていただければ分かるかもしれませんが、やっていることは結構単純で、大半は「$script?$r_page」を「$r_page.html」に置換しているだけです。とりあえず、lib/make_link.phpさえ変更すれば本文内でのリンクには反映されますので、試してみてはいかがでしょうか :)

  • しいたけ at 2005-05-07 (土) 15:38

    お早い回答、非常に助かりました。早速試してみたいと思います!

  • しいたけ at 2005-05-07 (土) 15:50

    すみません、make_link.php内に 「$script?$r_page」 が見つかりません。他の部分を変えることで同じ結果を実現できますか?

    • でぃあばぁ(管理者) at 2005-05-07 (土) 17:11

      1.4.5では記述が若干修正されているのを忘れていました (^^; 「$script . '?' . $r_page」を「$r_page . '.html'」に置換すればいいと思います。

      • しいたけ at 2005-05-07 (土) 21:24

        できました! 本当にありがとうございました!

  • はいろ at 2005-11-11 (金) 14:22

    これまでindex.phpとadmin.phpでそれぞれREADONLYを個別に設定するような使い方をいていたのですが、今回「ディレクトリに偽装」の改造を導入したいと思いパッチを適用したところ、この方法が通用しないことに気づきました。こちらのサイトでは編集用の認証と、それに伴うツールバーの表示切替はどのようにされているのでしょうか?

  • はいろ at 2005-11-11 (金) 14:24

    認証をpukiwiki.ini.phpの$edit_authで設定し、公式の続・質問箱/282(下段)>http://pukiwiki.osdn.jp/?%E7%B6%9A%E3%83%BB%E8%B3%AA%E5%95%8F%E7%AE%B1%2F282の方法を使ってツールバーの表示を切り替えるよう試してみたのですが、この方法だとリンク先にも書かれているとおりindex.phpにアクセスしただけで認証ダイアログが表示されてしまいます。

  • はいろ at 2005-11-11 (金) 14:25

    ぎゃ、リンクをミスりました。ごめんなさい。

    • でぃあばぁ(管理者) at 2005-11-11 (金) 21:13

      cubic9.comでは全てを場当たり的に修正しています :p まず編集認証を次のような感じにしてます。*1

      <?php $auth_users = array(
          'hoge'  => '{SMD5}OzJo/boHwM4q5R+g7LCOx2xGMkFKRVEx', // SMD5 'hoge_passwd'
      );
      $auth_method_type = 'pagename'; // By Page name
      $edit_auth = 1;
      $edit_auth_pages = array(
          '#^((?!^(SandBox)|(コメント/.+)$).)*$#' => 'hoge',
      ); ?>

      スキンは自前でテキトーに書いたもので、ツールバーは$_SERVER['PHP_AUTH_USER']で表示を切り替えています。

      <?php if (isset($_SERVER['PHP_AUTH_USER']) && ($_SERVER['PHP_AUTH_USER'] == 'hoge')) { ?>
      ...ツールバー...
      <?php } ?>

      このままでは認証するまでツールバーが表示されないので、認証はブックマークに入れてある http://example.com/?cmd=edit&page=FrontPage をクリックして行ってます。
      全体的にセキュリティは怪しげです。

    • でぃあばぁ(管理者) at 2005-11-11 (金) 22:26

      以前のような使い方をなさりたいのであれば、次のように別のPukiWiki(例ではwiki_b)を設置し、wikiやattachなどのデータディレクトリを共有するようにすればいいのではないでしょうか。

      ディレクトリ用途作業
      wiki_a閲覧用データディレクトリの変更, PKWK_READONLYを1にする, 偽装パッチを当てる
      wiki_b編集用データディレクトリの変更
      dataデータ用wiki_aのattach,backup,cache,counter,diff,trackback,wikiを移動

      共有の方法については公式サイトに例があったと思います。恐らくpukiwiki.ini.phpのDirectory settings Iの部分を変更するだけでOKです。

  • はいろ at 2005-11-11 (金) 23:31

    うぉーq(T▽Tq)このような勝手な質問にお答えいただきありがとうございます。大変参考になりました。どちらの方法をとるか迷いますが、これで無事パッチが導入できそうです。

  • はいろ at 2005-11-13 (日) 16:47

    たびたび恐れ入ります。上のほうのコメントにあるslash.phpなのですが、これは書かれている中身の他に何かrequireでファイルを読み込む必要でもあるのでしょうか?(^^;

    • でぃあばぁ(管理者) at 2005-11-13 (日) 20:05

      func.phpからinput_filterとanchor_replaceをコピーしてくれば動きます。ただし何のチェックもしていないので、一つ間違うと無限ループです :p 一応 RewriteOptions MaxRedirects=1 で避けていますが、正直全くお勧めできません。

  • はいろ at 2005-11-14 (月) 00:22

    おかげさまで、なんとか動くようになりました(´▽`)ただ、slash.phpを有効にすると、どういうわけか普通にページを開いただけで認証ダイアログが出てしまいますorz(教えていただいた$edit_authを使う方法でこれまでうまくいっていたのですが)

    • はいろ at 2005-11-14 (月) 00:51

      どうやらpukiwikiをサブディレクトリに設置しているのが問題らしく、slash.phpのLocation: /をLocation: /pukiwiki/にした時点でこの現象がおきるようです。

  • Logue at 2005-12-26 (月) 16:10

    html偽装したまではよかったが、全部index.phpにリダイレクトされてしまう。もしもfoo.htmlが存在したときにそっちにアクセスするようにしたい場合はどうしたらいんでしょう?

    • でぃあばぁ(管理者) at 2005-12-26 (月) 20:12
      RewriteCond %{REQUEST_FILENAME} !-f

      を指定するとどうですか?

  • Logue at 2006-01-02 (月) 23:17

    具体的に言うとGoogle Sitemapの認証対策です。PukiWikiでsitemapを作るプラグインはあるんですけど、認証を受けるときにいちいち、htaccessでそのときだけhtml偽装を解除するのもどうかなと思って。

  • machu at 2006-02-12 (日) 21:38

    Apache1.3+PHP4.3.10+PukiWiki1.4.6で「静的コンテンツに偽装」をやってみたところ、日本語ページ名のときにページが表示されませんでした。Apache側がURLをデコードしているのが原因のようです。「RewriteRule ^(.+)\.html$ index.php?cmd=read&page=$1 [L]」と書くことで、回避できました。

    • でぃあばぁ(管理者) at 2006-02-13 (月) 22:12

      ご報告ありがとうございます。おっしゃる通り一部のページ名で不具合が出るようです。なお、このサイトでは扱っていませんが、PATH_INFOを使う場合はデコード処理が入らないため、この不具合は起こらないようです。

  • かがみ at 2008-06-25 (Wed) 07:33

    ディレクトリ偽装パッチ (camo_dir_147.diff.2) を使わせて頂こうと試行錯誤中です.基本的にはうまく動いているのですが,編集時にプレビューをしようとすると「ページの内容は空です」と表示されてしまうという症状が出るようになりました.プレビューせずに更新すれば正常に書き換わります.当初は RewriteEngine を疑いましたが,RewriteEngine をオフにしても同様です.このような症状が出ているのは私のところだけでしょうか?

    • かがみ at 2008-06-25 (Wed) 23:20

      原因がわかりました.お騒がせしてすみません.何かの拍子に DATA_DIR に .txt という空っぽのファイルができてしまっており,これが plugin/edit.inc.php の中の plugin_edit_preview() でテンプレートとして読み込まれしまっていました.DATA_DIR/.txt がいつの間に作られたのかは謎ですが,導入当初 RewriteEngine をいろいろといじり回していたときに,何かおかしな状態にしてしまったのかもしれません.失礼致しました.

  • ドス at 2009-12-02 (Wed) 11:59

    適用後http://example.com/pukiwiki/Wiki/PukiWiki/ このURLをhttp://example.com/pukiwiki/Wiki/PukiWiki 最後のスラッシュを取りたいのですがどおすれば出来るでしょうか

    • でぃあばぁ(管理者) at 2009-12-05 (Sat) 11:22

      ソースコード内のリンクを拡張子なしファイルのような形式にする修正を行い(修正箇所は上記パッチを参考にしてください)、上記「HTMLに偽装」のApacheの設定の最終行を「RewriteRule ^(.+)$ index.php?$1 [L]」に書き換えて設定すれば、お望みの形式になるかと思います。

  • ドス at 2009-12-09 (Wed) 14:36

    遅くなってすみません、ありがとうございます。

  • ドス at 2009-12-10 (Thu) 17:41

    たびたびすみません。ディレクトリに偽装はうまくいったのですが、このサイトのように例えば?testのページやindex.php?testのページにアクセスしたらリダイレクトで /test/のページに行くようにしたいのですがどうすればいいでしょうか? さくらインターネットサーバーを使っています。

    • でぃあばぁ(管理者) at 2009-12-13 (Sun) 22:20

      pukiwiki/lib/init.phpの「$arg = input_filter($arg); // \0 除去」の後、「// unset QUERY_STRINGs」の前に下記を挿入してみてください。

      // cmdやpluginなしで?が含まれていたら (例:index.php?Linux)
      if (
          (
              (strpos($_SERVER['REQUEST_URI'], 'cmd=')    === FALSE) &&
              (strpos($_SERVER['REQUEST_URI'], 'plugin=') === FALSE)
          ) && (strrpos($_SERVER['REQUEST_URI'], '?') !== FALSE)
      ) {
          header('HTTP/1.1 301 Moved Permanently');
          header('Location: /' . anchor_replace($arg) . '/');
          exit;
      }
      • ドス at 2009-12-15 (Tue) 19:02

        できました!ありがとうございます。

  • at 2010-01-04 (Mon) 15:22

    ロリポップ!レンタルサーバーで特に修正することなく動きました。ありがとうございます。

  • しょう at 2017-05-08 (Mon) 02:24

    /Front_Page/ の箇所を日本語化していて、その箇所を消してトップへリダイレクトさせたいのですが分かりません。具体的には右のURLでも訪ねているのでご確認ください→ https://centossrv.com/patio/centossrv.cgi?read=3077

  • しょう at 2017-05-08 (Mon) 02:24

    かけない?

  • しょう at 2017-05-08 (Mon) 02:25

    書けない?

  • しょう at 2017-05-08 (Mon) 02:35

    かけませんか。テストテストですです。

*1 実際の設定とは異なります。
差分 一覧 編集