BugTrack/2396
の編集
Top
/
BugTrack
/
2396
[
トップ
] [
編集
|
差分
|
履歴
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
* ページのリダイレクトをしたい [#i8417b16] - ページ: [[BugTrack2]] - 投稿者: [[umorigu]] - 優先順位: 低 - 状態: 完了 - カテゴリー: 本体新機能 - 投稿日: 2016-11-10 (木) 01:46:01 - バージョン: 1.5.1 - リリース予定バージョン: 1.5.2 ** メッセージ [#w125f446] 標準のrenameプラグインで複数ページのリネームをすることはできるが、旧ページのURLへアクセスされると、新規ページ作成が行われてしまう。 旧ページから新ページへのリダイレクト機能が欲しい。 自由なリダイレクト設定は脆弱性の発生要因にもなるため、管理者だけが設定できるようにする。 *** 例 [#v902bd49] - BugTrack2/396 を BugTrack/2396 にリネームした後、 BugTrack2/396 にアクセスされた時に、BugTrack/2396 にリダイレクトしたい。 -------- - リダイレクトにも種類がありますよね。~ 1) Wikipedia のようにページ単位で #redirect を設定できるようにする。~ 2) pukiwiki.ini.php / :config/redirect などに書かれた正規表現に基づいてルーティングするような仕組みを作る。 -- [[bee]] &new{2016-11-10 (木) 03:38:03}; -- たぶん意図は 2) だと思うのですが、 A->B, B->C, C->A のようなルールを書いたときに連続で適用するのか、 %%ループしたらどうやって検出するのか%%、 など最終的に機能限定版 mod_rewrite を再実装することになってしまったりして…? -- [[bee]] &new{2016-11-10 (木) 03:46:42}; -- 1) もリダイレクトループの問題は考えなきゃいけないですね…。 -- [[bee]] &new{2016-11-10 (木) 04:23:28}; - 1a) rename プラグインを修正して~ #freeze #redirect(NEW_PAGE_NAME) のようなページを自動生成する機能を付ける、#redirect は freeze されている場合のみ実行するようにする、#redirect は /?cmd=read&page=PAGE_NAME の場合は発動させない、 という感じではどうか。 -- [[bee]] &new{2016-11-10 (木) 03:55:11}; -- リダイレクト先に /?cmd=read&page=PAGE_NAME 形式でリダイレクト元がリンクされると便利かも。 -- [[bee]] &new{2016-11-10 (木) 04:28:00}; - 関連: [[official:自作プラグイン/alias.inc.php]] / [[official:自作プラグイン/redirect.inc.php]] / wiki.revulo.com/pukiwiki/patch/rewritemap / xoops.hypweb.net/modules/pukiwiki/1519.html -- [[bee]] &new{2016-11-10 (木) 04:18:47}; - 頻繁に変更するところではないのと、正規表現を使いたくなるので、pukiwiki.ini.phpにルールを書こうと考えてました。ページ単位であればご提示の既存プラグインが使えますし。リダイレクトループ検出はしません -- [[umorigu]] &new{2016-11-10 (木) 08:50:53}; - 携帯対応も考えると alias.inc.php や redirect.inc.php は結構危ない感じだったりしますが、それ以前にページ数が倍になりますからね。検索が…。 -- [[bee]] &new{2016-11-14 (月) 02:04:55}; - ルーティングする仕組みを上手く設計すると [[BugTrack2/195]] も解決できるかも、ですね。 -- [[bee]] &new{2016-11-14 (月) 02:18:04}; - シンプルに実装してみました。[[BugTrack2/195]]など他の問題は残念ながら解決できません。別対応にしたいと思ってます [[commit:a021ead072]] -- [[umorigu]] &new{2016-11-14 (月) 05:05:17}; - ルールについてドキュメントに記載しました。[[official:PukiWiki/PageRedirection]] -- [[umorigu]] &new{2016-11-18 (金) 01:53:23}; - このサイトでは BugTrack2/xxx -> BugTrack/2xxx のリダイレクトを↓のように実現できます -- [[umorigu]] &new{2016-11-14 (月) 05:11:39}; // Page redirect rules $page_redirect_rules = array( //'#^RenamedOldProject($|(/(.+)$))#' => 'NewProject$1', '#^BugTrack2/(\d\d\d)$#' => 'BugTrack/2$1', '#^BugTrack2/(\d\d)$#' => 'BugTrack/20$1', '#^BugTrack2/(\d)$#' => 'BugTrack/200$1', ); - preg_matchが常に3回走るのがいまいちなので$replaceに関数を指定できるようにしました。 [[commit:fd549e4343]] -- [[umorigu]] &new{2016-11-15 (火) 02:03:09}; // Page redirect rules $page_redirect_rules = array( //'#^FromProject($|(/(.+)$))#' => 'ToProject$1', //'#^FromProject($|(/(.+)$))#' => function($matches) { return 'ToProject' . $matches[1]; }, '#^BugTrack2/(((\d+)($|/.+$))|(.+$))#' => function($matches) { if (isset($matches[3]) && $matches[3]) { $number = $matches[3]; if (strlen($number) === 3) { $new_page = 'BugTrack/2' . $number . $matches[4]; } else if (strlen($number) === 2) { $new_page = 'BugTrack/20' . $number . $matches[4]; } else if (strlen($number) === 1) { $new_page = 'BugTrack/200' . $number . $matches[4]; } else { $new_page = 'BugTrack/' . $number . $matches[4]; } } else { $new_page = 'BugTrack/' . $matches[5]; } return $new_page; }, ); - 無名関数を利用するのは PHP 5.3+ な機能なので、ドキュメントないし pukiwiki.ini.php に注釈が欲しいですね。 -- [[bee]] &new{2016-11-16 (水) 00:36:47}; -- Todo: '#(.*)#' => function($matches) { /* mbstring でゴニョゴニョ */ return $new_page;} をあとで試してドキュメントに書く。 -- [[bee]] &new{2016-11-16 (水) 00:44:09}; -- 今の実装だとmatchしたら必ずredirectしてしまうので、これは動きません。replace結果を元のページと比較するべきでしたね -- [[umorigu]] &new{2016-11-18 (金) 01:13:59}; -- 変換後にもページ名が変わらなかったらリダイレクトしないようにしました [[commit:22b6214f55]] -- [[umorigu]] &new{2016-11-18 (金) 01:34:26}; - ありがとうございます!(時間がなくてまだ動作テストできてない…orz) -- [[bee]] &new{2016-11-19 (土) 19:00:14}; - devサイトをアップデートした([[開発日記/2016-12-07]])という事で、巡回してみて疑問が1つ。recentプラグインはリダイレクト対応させないのでしょうか?ページ内からの関連リンク先一覧$related に登録させないためだかでmake_pagelink() を通さず直接生成しているのと、リダイレクトを確認してないので表示中のページならUIを変える機能([[BugTrack/676]])がBugTrack2/xxx -> BugTrack/2xxx で動いてないです。(ん?BugTrack/676 って事は、popular プラグインも自前生成か…) -- &new{2016-12-07 (水) 22:02:43}; -- (1)リダイレクト設定は頻繁には変えない想定であること。(2)recentプラグインのソースであるcache/recent.datはいくつかのページを更新すれば内容が入れ替わって旧ページの情報はなくなること。からリダイレクトへの特別な対応は不要だと思ってます。cache/recent.datを手動で削除してしまえば再生成されるのですけど、挙動を見るために今はあえて残しています。そんなに困らないと思ってます -- [[umorigu]] &new{2016-12-08 (木) 05:56:33}; -- popularも同じじゃないかな... 確かに、新しい機能に対応していない各pluginが、「意図してそうしているのか」「対応漏れなのか」は個別に確認が必要ですね -- [[umorigu]] &new{2016-12-08 (木) 06:02:12}; -- recentは[[BugTrack/676]]のためにmake_pagelink()を使わずに自前対応してるのかもしれません -- [[umorigu]] &new{2016-12-08 (木) 06:07:43}; -- [[commit:4683d446b562736dce7a199dc9dd168f455fe168]] で分岐させたのだから、make_pagelink() に対して「アンカー無しで表示中ページが飛び先の場合」だけBugTrack/676 と同様な仕様変更をするかどうかにかかわらず、単純なページリンク生成する側を $items .= ' <li>' . make_pagelink($page) . '</li>' . "\n"; のように置き換えずに自前生成を踏襲したのは何でだったかな~が「$related に登録」ウンヌンなので、理由がハズレならお気になさらないでください。(ls2 プラグインのように、id をa タグに割り振ってるわけでもないのに、う~ん…) -- 2016-12-07 (水) 22:02:43 コメ主 &new{2016-12-08 (木) 23:02:02}; -- この処理に置き換えるのでもよさそうですね -- [[umorigu]] &new{2016-12-10 (土) 18:55:04}; -- 見ましたけどrecent.inc.phpの処理とmake_pagelink()内での処理がかなり重複しているので、そのまま置き換えると無駄な処理が多くなってしまうようです -- [[umorigu]] &new{2016-12-10 (土) 19:08:59}; -- そういう事でしたか。わざわざ調査までしていただき、ありがとうございました。 -- 2016-12-07 (水) 22:02:43 コメ主 &new{2016-12-12 (月) 20:55:22}; #comment
タイムスタンプを変更しない
* ページのリダイレクトをしたい [#i8417b16] - ページ: [[BugTrack2]] - 投稿者: [[umorigu]] - 優先順位: 低 - 状態: 完了 - カテゴリー: 本体新機能 - 投稿日: 2016-11-10 (木) 01:46:01 - バージョン: 1.5.1 - リリース予定バージョン: 1.5.2 ** メッセージ [#w125f446] 標準のrenameプラグインで複数ページのリネームをすることはできるが、旧ページのURLへアクセスされると、新規ページ作成が行われてしまう。 旧ページから新ページへのリダイレクト機能が欲しい。 自由なリダイレクト設定は脆弱性の発生要因にもなるため、管理者だけが設定できるようにする。 *** 例 [#v902bd49] - BugTrack2/396 を BugTrack/2396 にリネームした後、 BugTrack2/396 にアクセスされた時に、BugTrack/2396 にリダイレクトしたい。 -------- - リダイレクトにも種類がありますよね。~ 1) Wikipedia のようにページ単位で #redirect を設定できるようにする。~ 2) pukiwiki.ini.php / :config/redirect などに書かれた正規表現に基づいてルーティングするような仕組みを作る。 -- [[bee]] &new{2016-11-10 (木) 03:38:03}; -- たぶん意図は 2) だと思うのですが、 A->B, B->C, C->A のようなルールを書いたときに連続で適用するのか、 %%ループしたらどうやって検出するのか%%、 など最終的に機能限定版 mod_rewrite を再実装することになってしまったりして…? -- [[bee]] &new{2016-11-10 (木) 03:46:42}; -- 1) もリダイレクトループの問題は考えなきゃいけないですね…。 -- [[bee]] &new{2016-11-10 (木) 04:23:28}; - 1a) rename プラグインを修正して~ #freeze #redirect(NEW_PAGE_NAME) のようなページを自動生成する機能を付ける、#redirect は freeze されている場合のみ実行するようにする、#redirect は /?cmd=read&page=PAGE_NAME の場合は発動させない、 という感じではどうか。 -- [[bee]] &new{2016-11-10 (木) 03:55:11}; -- リダイレクト先に /?cmd=read&page=PAGE_NAME 形式でリダイレクト元がリンクされると便利かも。 -- [[bee]] &new{2016-11-10 (木) 04:28:00}; - 関連: [[official:自作プラグイン/alias.inc.php]] / [[official:自作プラグイン/redirect.inc.php]] / wiki.revulo.com/pukiwiki/patch/rewritemap / xoops.hypweb.net/modules/pukiwiki/1519.html -- [[bee]] &new{2016-11-10 (木) 04:18:47}; - 頻繁に変更するところではないのと、正規表現を使いたくなるので、pukiwiki.ini.phpにルールを書こうと考えてました。ページ単位であればご提示の既存プラグインが使えますし。リダイレクトループ検出はしません -- [[umorigu]] &new{2016-11-10 (木) 08:50:53}; - 携帯対応も考えると alias.inc.php や redirect.inc.php は結構危ない感じだったりしますが、それ以前にページ数が倍になりますからね。検索が…。 -- [[bee]] &new{2016-11-14 (月) 02:04:55}; - ルーティングする仕組みを上手く設計すると [[BugTrack2/195]] も解決できるかも、ですね。 -- [[bee]] &new{2016-11-14 (月) 02:18:04}; - シンプルに実装してみました。[[BugTrack2/195]]など他の問題は残念ながら解決できません。別対応にしたいと思ってます [[commit:a021ead072]] -- [[umorigu]] &new{2016-11-14 (月) 05:05:17}; - ルールについてドキュメントに記載しました。[[official:PukiWiki/PageRedirection]] -- [[umorigu]] &new{2016-11-18 (金) 01:53:23}; - このサイトでは BugTrack2/xxx -> BugTrack/2xxx のリダイレクトを↓のように実現できます -- [[umorigu]] &new{2016-11-14 (月) 05:11:39}; // Page redirect rules $page_redirect_rules = array( //'#^RenamedOldProject($|(/(.+)$))#' => 'NewProject$1', '#^BugTrack2/(\d\d\d)$#' => 'BugTrack/2$1', '#^BugTrack2/(\d\d)$#' => 'BugTrack/20$1', '#^BugTrack2/(\d)$#' => 'BugTrack/200$1', ); - preg_matchが常に3回走るのがいまいちなので$replaceに関数を指定できるようにしました。 [[commit:fd549e4343]] -- [[umorigu]] &new{2016-11-15 (火) 02:03:09}; // Page redirect rules $page_redirect_rules = array( //'#^FromProject($|(/(.+)$))#' => 'ToProject$1', //'#^FromProject($|(/(.+)$))#' => function($matches) { return 'ToProject' . $matches[1]; }, '#^BugTrack2/(((\d+)($|/.+$))|(.+$))#' => function($matches) { if (isset($matches[3]) && $matches[3]) { $number = $matches[3]; if (strlen($number) === 3) { $new_page = 'BugTrack/2' . $number . $matches[4]; } else if (strlen($number) === 2) { $new_page = 'BugTrack/20' . $number . $matches[4]; } else if (strlen($number) === 1) { $new_page = 'BugTrack/200' . $number . $matches[4]; } else { $new_page = 'BugTrack/' . $number . $matches[4]; } } else { $new_page = 'BugTrack/' . $matches[5]; } return $new_page; }, ); - 無名関数を利用するのは PHP 5.3+ な機能なので、ドキュメントないし pukiwiki.ini.php に注釈が欲しいですね。 -- [[bee]] &new{2016-11-16 (水) 00:36:47}; -- Todo: '#(.*)#' => function($matches) { /* mbstring でゴニョゴニョ */ return $new_page;} をあとで試してドキュメントに書く。 -- [[bee]] &new{2016-11-16 (水) 00:44:09}; -- 今の実装だとmatchしたら必ずredirectしてしまうので、これは動きません。replace結果を元のページと比較するべきでしたね -- [[umorigu]] &new{2016-11-18 (金) 01:13:59}; -- 変換後にもページ名が変わらなかったらリダイレクトしないようにしました [[commit:22b6214f55]] -- [[umorigu]] &new{2016-11-18 (金) 01:34:26}; - ありがとうございます!(時間がなくてまだ動作テストできてない…orz) -- [[bee]] &new{2016-11-19 (土) 19:00:14}; - devサイトをアップデートした([[開発日記/2016-12-07]])という事で、巡回してみて疑問が1つ。recentプラグインはリダイレクト対応させないのでしょうか?ページ内からの関連リンク先一覧$related に登録させないためだかでmake_pagelink() を通さず直接生成しているのと、リダイレクトを確認してないので表示中のページならUIを変える機能([[BugTrack/676]])がBugTrack2/xxx -> BugTrack/2xxx で動いてないです。(ん?BugTrack/676 って事は、popular プラグインも自前生成か…) -- &new{2016-12-07 (水) 22:02:43}; -- (1)リダイレクト設定は頻繁には変えない想定であること。(2)recentプラグインのソースであるcache/recent.datはいくつかのページを更新すれば内容が入れ替わって旧ページの情報はなくなること。からリダイレクトへの特別な対応は不要だと思ってます。cache/recent.datを手動で削除してしまえば再生成されるのですけど、挙動を見るために今はあえて残しています。そんなに困らないと思ってます -- [[umorigu]] &new{2016-12-08 (木) 05:56:33}; -- popularも同じじゃないかな... 確かに、新しい機能に対応していない各pluginが、「意図してそうしているのか」「対応漏れなのか」は個別に確認が必要ですね -- [[umorigu]] &new{2016-12-08 (木) 06:02:12}; -- recentは[[BugTrack/676]]のためにmake_pagelink()を使わずに自前対応してるのかもしれません -- [[umorigu]] &new{2016-12-08 (木) 06:07:43}; -- [[commit:4683d446b562736dce7a199dc9dd168f455fe168]] で分岐させたのだから、make_pagelink() に対して「アンカー無しで表示中ページが飛び先の場合」だけBugTrack/676 と同様な仕様変更をするかどうかにかかわらず、単純なページリンク生成する側を $items .= ' <li>' . make_pagelink($page) . '</li>' . "\n"; のように置き換えずに自前生成を踏襲したのは何でだったかな~が「$related に登録」ウンヌンなので、理由がハズレならお気になさらないでください。(ls2 プラグインのように、id をa タグに割り振ってるわけでもないのに、う~ん…) -- 2016-12-07 (水) 22:02:43 コメ主 &new{2016-12-08 (木) 23:02:02}; -- この処理に置き換えるのでもよさそうですね -- [[umorigu]] &new{2016-12-10 (土) 18:55:04}; -- 見ましたけどrecent.inc.phpの処理とmake_pagelink()内での処理がかなり重複しているので、そのまま置き換えると無駄な処理が多くなってしまうようです -- [[umorigu]] &new{2016-12-10 (土) 19:08:59}; -- そういう事でしたか。わざわざ調査までしていただき、ありがとうございました。 -- 2016-12-07 (水) 22:02:43 コメ主 &new{2016-12-12 (月) 20:55:22}; #comment
テキスト整形のルールを表示する