トップ 差分 一覧 Farm ソース 検索 ヘルプ RSS ログイン

BugTrack-plugin/388

ページの作成や編集にはユーザ登録が必要です。

ページへのリンクを静的URLにするプラグイン(改変版)

  • 投稿者: A_M
  • カテゴリ: 新規
  • 優先度: 普通
  • 状態: 提案
  • 日時: 2008年09月19日 19時09分59秒

 内容

BugTrack-plugin/350 (おいぬめ氏作) と同じく、静的なURLを出力するためのプラグインです。

同プラグインとの違いは、以下の通り

  1. Farmへの対応とWinXP+Apache2.x+mod_rewrite の日本語環境でも動作するようにした。
  2. ユーザに議論されていた %2f(/), %23(#), %26(&), %3b(;) などの記号を含むページ名に対応した。
  3. インストール順が早くなるようにし、Install.pm内で利用されるAPI(Wiki::add_menu)のURL生成にも対応した。

具体的には、

  1. URL生成はサーバーの環境変数から文字列処理する方式とした(環境が限られるので)
  2. 静的URL生成時ページ名を2回URLエンコードする手法を採用
  3. プラグインパッケージ名を_add_*と、早期インストールになるよう命名

 対応バージョン

  • FSWiki3.6.x…API(Wiki::create_page_url,Wiki::create_url)に完全対応しておくこと

 パッケージ

プラグイン・アーカイブ

  • _add_staticurl_(yyyymmdd).zip - yyyymmdd は公開年月日
    • plugin/_add_staticurl/Install.pm

ダウンロードは更新履歴の項目からお願いします。

 インストール

  1. Wiki::HTMLParser.pm を確認し、独自に修正して下さい。
    • Wiki::HTMLParser::wiki_anchor は、API(Wiki::create_page_url)を利用していないバージョンがあるかもしれません。
    • 開発版のFSWiki3.6.3dev3も修正が必要です。CVSの最新版をご利用の方は修正の必要はありません(2008-09-24:追記)。
  1. .htaccess ファイルを編集します。(Apache管理者は、httpd.conf でも可)
    • 下記「RewriteRuleの記述例」を参照
  1. アーカイブをFSWiki設置ディレクトリに展開します。
    • 管理画面のプラグイン設定で _add_staticurl を有効にしてください。

Rewrite ルールの記述例

RewriteEngine on
RewriteBase /(wiki.cgi 設置dir)
RewriteRule ^(.+)/([^/]+)\.html$ wiki.cgi/$1?page=$2 [NE,QSA,L]
RewriteRule ^([^/]+)\.html$ wiki.cgi?page=$1 [NE,QSA,L]
RewriteRule ^(.+)/$ wiki.cgi/$1 [NE,QSA,L]

例示したRewriteRuleのフラグについて(詳細は参考文献を参照)

  • NE…NoEscape (URLエスケープの扱い)
  • QSA…QueryStringsAppend (クエリ文字付与)
  • L…Last(条件適合時にRewrite処理を終了)

 依存関係

以下のAPI関数を上書きします。この2つの関数を上書きするプラグインを使うと、正しく機能しません。

  1. Wiki::create_url
  2. Wiki::redirectURL

 参考文献

mod_rewrite

FSWIki用のプラグイン・パッチ

 ライセンス

GPL

 更新履歴

_add_staticurl_20080919.zip(668)
初版公開

コア修正用ソース

wiki_anchor_pm.txt(736) - lib/Wiki/HTMLParser.pm
最新のCVSでは対応済みの内容でしたので、コミットされたコードを紹介。

 コメント

  • XAMPPをインストールしたWindows環境で、新規に3.6.3dev3と本プラグインをダウンロードし使用したところ、wikiメニュー(トップ、新規などがあるところ)はhogehoge.htmlになりますが、wikiページ内にあるリンクはwiki.cgi?page=hogehogeのままです。想定する動作としては「hogehoge.html」になることだと思うので、プラグインインストール以外でどこかその他変更しなければならないところがあればご教授願います。 - MRB (2008年09月23日 21時29分34秒)
  • 開発版として紹介されているバージョン 3.6.3dev3 を改めてダウンロードし、確認したところ、API未使用箇所がありました。lib/Wiki/HTMLParser.pm (440行付近:wiki_anchor)を修正する必要があります。wiki_anchor_pm.txt(736)のコードに書き換えて下さい。 - A_M (2008年09月24日 07時49分21秒)
  • 動作確認できました。ありがとうございました。 - MRB (2008年09月25日 21時22分14秒)
  • (3月24日訂正)Wiki::redirectURL の上書き部分ですが、Location ヘッダに URL をフルパスで記述する為に、以下の変更をして使っています。 - sealau (2009年03月24日 17時06分57秒)
  # Locationタグでリダイレクト
  if($self->config('redirect')==1){
   my ($hoge,$param) = split(/\?/,$url);
   $hoge =~ s/(.*\/)*//;
   $url = $self->get_CGI->url() . $hoge;
   if($param ne ''){
    $url = "$url?$param";
   }
   print "Location: $url\n\n";
  • たびたびで申し訳ないのですが、Admin権限でログインしている状態にもかかわらず、凍結しているページを編集できないパターンがあります(3.6.3.1。新規ダウンロードし、当プラグインのみインストール)。凍結していないページでは編集可能です。htaccessのリダイレクト先をhttpを含むフルパス(URL)にすると編集可能なので、このプラグインが原因ではないですが、ご報告まで - MRB (2009年04月05日 10時47分19秒)
  • 【パターン】当プラグインを有効化+htaccessを設定し、Admin権限でログインした状態で
    • ドキュメントルートディレクトリ(例:example.com/)にfswikiを設置したときは、凍結しているページでも編集可能
    • ドキュメントルート以外(例:example.com/dev/test/)にfswikiを設置したときは、凍結しているページのメニューに「編集」が出てこない - MRB (2009年04月05日 10時47分19秒)
  • ページタイトルにスラッシュ ("/") を含むページへリンクが正常にたどれず、404エラーになってしまいました。「$url .= &Util::url_encode(&Util::url_encode($params->{page})).'.html';」の直前で $params->{page} =~s|/|%2F|g を施すことでとりあえず対処できました。 - sabimaru (2012年09月27日 15時25分01秒)
  • 追記です。同様に "+"、"&" をタイトルに含むページへのリンクも正常に張られなかったので、"/" と同様の前処理を行なうよう対処しました。一応ご報告します。 - sabimaru (2012年09月27日 17時17分44秒)
  • さらに追記です。上記不具合は、https://〜からアクセスした時のみ発生するようです。原因はよくわかりません。上記修正を行なうと、http://〜からアクセスした場合に逆に不具合が生じました。 - sabimaru (2012年09月30日 18時40分59秒)
  • utf-8なFSwikiで使った時、ブラウザのURL欄に日本語(例:http://example.com/ウィキ.html。Wikipediaみたいなかたち)で表示されるよう本プラグイン中のURLエンコード2重掛け部分を1回のみにしたときにハマったのでメモを残しておきます - MRB (2015年01月09日 23時36分00秒)
RewriteRule ^([^/]+)\.html$ wiki.cgi?page=$1 [NE,QSA,L]

この部分を変えて対応します。

RewriteRule ^([^/]+)\.html$ http://example.com/wiki.cgi?page=$1 [NE,QSA,L]

のようにリライト後をhttpからにする方法が1つ、

RewriteRule ^([^/]+)\.html$ http://example.com/wiki.cgi?page=$1 [B,QSA,L]

のようにBオプションを使い、かつ、wiki.cgiでデコードする(適当なところに$cgi->param("page", &Util::url_decode($cgi->param("page")));を入れる)方法で行けました。ご参考まで。

  • ページの表示権限とセッションのところではまってしまい、どなたか知恵を貸して下さい。素の状態のfswikiに本プラグインをインストールした状態です。セッション維持まわりの挙動です。
    • ログイン後、例えばFrontPageの参照権限を管理者にします。
    • この時点でログイン状態を保ったままページ一覧からFrontPage にアクセスすれば問題なく表示されます。
    • しかし、一度ログアウト→ログイン後、再びFrontPageを表示しても権限が無いエラーが発生し表示できません。
      • この時、ブラウザでクッキーの状態を見ると、何故か/FrontPage.htmlにcgisessidのものが存在し、値が1回目のログインで生成されたものになっています。
      • 本プラグインを使用しないときはFrontPage(?page=FrontPage)にアクセスしてもクッキーは作成されません。
    • この間違ったクッキーを削除したところ、エラーなくFrontPageアクセスができるようになり、また、2回目のログインセッションの情報を持つクッキーが作られていました。
    • 本来の動作としては、本プラグインを利用しても各ページごとにセッション用クッキーは作らない、だと思います。この現象は、そもそも本プラグインを利用する限りはどうしようもないことなのか、もし直るのであればどのように修正すれば良いのかが知りたいです。よろしくお願いします - MRB (2015年02月02日 19時40分33秒)
  • Util.pm に cookie_path 関数がありますが、ここでCookieで使用されるキー情報(パス情報)を生成しています。ここでは環境変数(REQUEST_URI)からCGIパラメータ(?以降)とスクリプト名を削除したものをCookieのキー情報としていますが、REQUEST_URIに 〜.html と入っており、Cookieのキー情報が想定されているものになっていないことが原因かと思われます。$path=~ の最後に $path =~ s/[\/]+\.html$//; などのように追加しておけば治るかもしれません。 - KG (2015年02月04日 17時58分29秒)
  • KGさん、ありがとうございます。環境変数とのことなので、ENVのREQUEST_URIの値を本プラグインをインストールしていない状態の値(?page=FrontPageなど)に変更する処理を追加することで改善されました。 - MRB (2015年02月05日 00時28分42秒)
  • とりあえず上記で問題無さそうですが、Util::cookie_pathを上書きしてもよさそうですね。そっちも試してみます。 - MRB (2015年02月05日 00時53分44秒)
お名前: コメント:
_add_staticurl_20080919.zip wiki_anchor_pm.txt

最終更新時間:2015年02月05日 00時53分44秒