#author("2022-04-24T15:35:11+09:00;2022-04-24T15:31:06+09:00","default:umorigu","umorigu")
#author("2022-04-24T15:36:53+09:00;2022-04-24T15:31:06+09:00","default:umorigu","umorigu")
PukiWikiのURLとカスタマイズの情報をまとめるページです。

#contents

* URL取得方法まとめ [#summary]

1.5.2以降、プラグインから各種URLを取得する場合は以下の指定を使ってください。
PukiWiki 1.5.4 以降ではURLカスタマイズが反映されたURLを取得できます。

|項目|1.5.2以降の指定|1.5.1以前の指定 (deprecated)|補足|h
|トップページへのリンク|get_base_uri()|get_script_url(), global $script|絶対URLが必要でない場合は引数無し|
|トップページへのリンク (絶対URL)|get_base_uri(PKWK_URI_ABSOLUTE)|get_script_url(), global $script||
|ページのリンク|get_page_uri($page)|get_script_url() + '?' + pagename_urlencode($page)&br;get_script_url() + '?' + rawurlencode($page)|$pageが$defaultpageの場合、get_base_uri()と同じ値が返る&br;絶対URLが必要でない場合は引数無し|
|ページのリンク (絶対URL)|get_page_uri($page, PKWK_URI_ABSOLUTE)|get_script_url() + '?' + pagename_urlencode($page)&br;get_script_url() + '?' + rawurlencode($page)|$pageが$defaultpageの場合、get_base_uri()と同じ値が返る|
|プラグイン呼び出し|get_base_uri() + '?cmd=<plugin_name>&...'&br;get_base_uri() + '?plugin=<plugin_name>&...'|get_script_url() + '?cmd=<plugin_name>&...'&br;get_script_url() + '?plugin=<plugin_name>&...'|絶対URLが必要でない場合は引数無し|
|プラグイン呼び出し (絶対URL)|get_base_uri(PKWK_URI_ABSOLUTE) + '?cmd=<plugin_name>&...'&br;get_base_uri(PKWK_URI_ABSOLUTE) + '?plugin=<plugin_name>&...'|get_script_url() + '?cmd=<plugin_name>&...'&br;get_script_url() + '?plugin=<plugin_name>&...'||


追加引数に PKWK_URI_ABSOLUTE を指定すると絶対URLが得られる。ただし、引数を指定しない場合に必ず相対URLが得られるわけではなく、 [[pkwk_base_uri_type_stack_push()>#pkwk_base_uri_type_stack_push]] の仕組みにより、絶対URLが必要なサイトや場面ではルート相対URLや絶対URLが得られることもある。
追加引数に PKWK_URI_ABSOLUTE を指定すると絶対URLが得られる。ただし、引数を指定しない場合に必ず相対URLが得られるわけではなく、 [[pkwk_base_uri_type_stack_push()>#pkwk_base_uri_type_stack_push]] の仕組みにより、絶対URLが必要なサイトや場面ではルート相対URLや絶対URLが返ることもある。

- [[BugTrack/2525]] URLカスタマイズの仕組み
- [[BugTrack/2213]] get_page_uri($page) 関数, 相対URL/絶対URL

* トップページのURL $script [#script]


グローバル変数 $script によって 設置するWikiサイトのトップページのURLを設定します。( 例: 'http&#58;//wiki.example.com/pukiwiki/' )

例:

- https&#58;//wiki.example.com/pukiwiki/
- http&#58;//example.jp/
- http&#58;//localhost:8080/wiki/index.php

シンプルな構成の場合、PukiWikiはPHPやApacheなどWebサーバーの設置情報から $script を推測します。

$script の推測に失敗する場合や、URLを固定したい場合、pukiwiki.ini.php で $script を明示するようにしてください。

pukiwiki.ini.php:
 $script = 'https:// wiki.example.com/pukiwiki/';


URLの固定: 例えば https&#58;//wiki.example.com/pukiwiki/index.php でもアクセスできるが、URLは https&#58;//wiki.example.com/pukiwiki/ に固定したい場合など。

''注意:''

global $script は pukiwiki.ini.php での設定のみに利用し、プラグインやロジックから直接グローバル変数 $script を参照することは避けること。
トップページへのリンクを取得したい場合は get_base_uri(), 絶対パスを取得したい場合は get_base_uri(PKWK_URI_ABSOLUTE) を使います。

* get_base_uri() [#get_base_uri]

PukiWiki本体コードやプラグインから、PukiWiki本体のURLを取得します。


プラグインの呼び出しのURLはこの get_base_uri() に '?' から始まるクエリ文字列を付与することで生成できます。

用途に応じて、PKWK_URI_RELATIVE, PKWK_URI_ROOT, PKWK_URI_ABSOLUTE のオプションを設定します。

例:

 $edit_action_url = get_base_uri() . '?cmd=edit&page=EditTargetPage';

この値は グローバル変数$script から生成されます。

* get_page_uri($page) [#get_page_uri]

PukiWiki本体コードやプラグインから、各ページのURLを生成します。

取得した値はそのままページ表示用のURLとして利用し、クエリパラメータ ( ?key=value や &key=value ) を追加しない。URLフラグメント ( #key=value の利用は問題ない )


用途に応じて、PKWK_URI_RELATIVE, PKWK_URI_ROOT, PKWK_URI_ABSOLUTE のオプションを設定します。


この値は グローバル変数$script から生成されます。


* 絶対パスと相対パス [#o0b6c755]

PukiWiki内のページおよびトップページを指し示すのに3種類のパス指定方法があります。

- 絶対パス (PKWK_URI_ABSOLUTE)
-- 現在表示しているページとは関係なく、全世界で特定のリソースを特定する
-- 利用箇所: URLのユーザーへの提示、サーバー外からのリダイレクト先
-- ( 例: https&#58;//pukiwiki.osdn.jp/dev/?PageURI )
- ルート相対パス (PKWK_URI_ROOT)
-- 現在表示しているページのサーバーのトップページ '/' からの相対位置でリソースを表す
-- 利用箇所: サーバーリダイレクト (300, 301, 302 リダイレクトでの Location ヘッダの値)
-- URLカスタマイズでPath風のURLを採用した場合のリソース特定
-- ( 例: /dev/?PageURI )
- 相対パス (PKWK_URI_RELATIVE)
-- 現在表示しているページからの相対位置でリソースを表す
-- 利用箇所: PukiWiki内のリソース(ページ)参照
-- ( 例: ./?PageURI )

正しく設定されている限り互換性があり、相対パスが使えるところではROOT相対パスや絶対パスを指定しても問題なく動作する。

相対パスよりも絶対パスでの指定の方が確実ではあるが、基準となるURL (PukiWikiでは $script) を正しく指定していないと動作しないというデメリットがある。
反対に、相対パスベースであれば仮に基準URLを正しく設定していない場合 (基準URLの自動推測に失敗した場合も含む) でも動作する。

PukiWiki は 1.5.2 から、相対パスを積極的に利用する方針に変更している。 [[BugTrack/2213]]。 1.5.1 以前はほとんどのケースで絶対パスを使っていた。


* pkwk_base_uri_type_stack_push() [#pkwk_base_uri_type_stack_push]

pkwk_base_uri_type_stack_push(opt); を呼び出してから pkwk_base_uri_type_stack_pop() を呼び出すまでの間、
get_base_uri() で get_page_uri() での返却地が opt によって影響を受けます。

- pkwk_base_uri_type_stack_push(PKWK_URI_ROOT) の場合、この間の PKWK_URI_RELATIVE は無視され、 PKWK_URI_ROOT を指定したものとして扱われます。
- pkwk_base_uri_type_stack_push(PKWK_URI_ABSOLUTE) の場合、常に PKWK_URI_ABSOLUTE を指定したものとして扱われます。


pkwk_base_uri_type_stack_push() と get_page_uri() の結果を以下のサンプルで表します。

 $script = 'http:// wiki.example.com/pukiwiki/';

 $link1 = get_page_uri('Abc/Sample); // => './?Abc/Sample'
 pkwk_base_uri_type_stack_push(PKWK_URI_ROOT);
 $link2 = get_page_uri('Abc/Sample); // => '/pukiwiki/?Abc/Sample'
 pkwk_base_uri_type_stack_pop()
 $link3 = get_page_uri('Abc/Sample); // => ./?Abc/Sample'
 pkwk_base_uri_type_stack_push(PKWK_URI_ABSOLUTE);
 $link4 = get_page_uri('Abc/Sample); // => 'http:// wiki.example.com/pukiwiki/?Abc/Sample'
 pkwk_base_uri_type_stack_pop();
 $link5 = get_page_uri('Abc/Sample); // => './?Abc/Sample'


* 実際の値 [#value_samples]

 $script = 'http:// wiki.example.com/pukiwiki/';

|	関数	|	結果	|	(pkwk_base_uri_type_stack_push(PKWK_URI_ROOT); の後)	|	(pkwk_base_uri_type_stack_push(PKWK_URI_ABSOLUTE); の後)	|h
|	get_base_uri()	|	'./'	|	'/pukiwiki/'	|	'http&#58;//wiki.example.com/pukiwiki/'	|
|	get_base_uri(PKWK_URI_RELATIVE)	|	'./'	|	'/pukiwiki/'	|	'http&#58;//wiki.example.com/pukiwiki/'	|
|	get_base_uri(PKWK_URI_ROOT)	|	'/pukiwiki/'	|	'/pukiwiki/'	|	'http&#58;//wiki.example.com/pukiwiki/'	|
|	get_base_uri(PKWK_URI_ABSOLUTE)	|	'http&#58;//wiki.example.com/pukiwiki/'	|	'http&#58;//wiki.example.com/pukiwiki/'	|	'http&#58;//wiki.example.com/pukiwiki/'	|
|	get_page_uri('Abc/Sample')	|	'./?Abc/Sample'	|	'/pukiwiki/?Abc/Sample'	|	'http&#58;//wiki.example.com/pukiwiki/?Abc/Sample'	|
|	get_page_uri('Abc/Sample', PKWK_URI_RELATIVE)	|	'./?Abc/Sample'	|	'/pukiwiki/?Abc/Sample'	|	'http&#58;//wiki.example.com/pukiwiki/?Abc/Sample'	|
|	get_page_uri('Abc/Sample', PKWK_URI_ROOT)	|	'/pukiwiki/?Abc/Sample'	|	'/pukiwiki/?Abc/Sample'	|	'http&#58;//wiki.example.com/pukiwiki/?Abc/Sample'	|
|	get_page_uri('Abc/Sample', PKWK_URI_ABSOLUTE)	|	'http&#58;//wiki.example.com/pukiwiki/?Abc/Sample'	|	'http&#58;//wiki.example.com/pukiwiki/?Abc/Sample'	|	'http&#58;//wiki.example.com/pukiwiki/?Abc/Sample'	|

get_base_uri(PKWK_URI_ABSOLUTE) の値は常に $script と一致します。 ($script を明示した場合も、 $script が推測によって自動設定された場合も同様)

* 参照 [#b175f330]

- [[BugTrack/2213]] get_page_uri($page) 関数, 相対URL/絶対URL
- [[BugTrack/2525]] URLカスタマイズの仕組み
- [[official:自作プラグイン/s.inc.php]]

* コメント [#comments]

----

#comment

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u12. HTML convert time: 0.096 sec.

OSDN