Manual:Short URL/ja


 * See Manual:Short URL overview if you find below confusing

Tim Berners-Lee卿によれば、よいURLはけっして変更されません.  通常のページのためにブラウザロケーションバーからPHPのメカニズムを隠すショートURLはよいユーザインターフェイスです.

これらのショートURLはデフォルトではMediaWikiに実装されていません. 複雑で特定のウェブサーバによって大きく異なるウェブサーバコンフィギュレーションに応じてなされるからです.

すべての例において、MediaWikiは の位置のディレクトリにインストールされ、 を のエイリアスとして使用します. 下記の例においてこれらの値("wiki"と"w")を変更することによって他のインストールディレクトリとエイリアスを使うことは可能です. 両方同じか、ルートディレクトリへのエイリアスを使用したい場合、処理は若干複雑になりますが、両方ともちょっと微調整することで可能です. (少しの使用上の制限があります)

ルートアクセスをしない
これらのメソッドはサーバコンフィギュレーションへのアクセス権を持たないことを想定します(例えば共有サーバ); その場合、下の'Root access'をご覧下さい. エイリアスもしくはリライトを使用することが出来ますが、おそらくは両方では出来ないでしょう.

エイリアス
サーバが"w/index.php"を"wiki"に置き換えられるように.htaccessにエイリアスを設定することが出来ます.


 * 少なくともApache 2.0ではAliasは.htaccessでは許可されません. 筆者が見逃したかもしれませんのでAlias Directiveをご覧下さい.

エイリアス無しの解決方法
筆者は数時間格闘してこの解決方法を見つけました. 私のサイト(http://www.eroswiki.com)は~/eroswiki/wikiです. ~/eroswikiディレクトリで.htaccessを使用することで、ショートURLとリダイレクトを使用することが出来ました. 私のサイトのホストは1 & 1です.

~/web_root/.htaccess RewriteEngine On RewriteCond %{HTTP_HOST} ^domain.com RewriteRule ^(.*)$ http://www.domain.com/$1 [r=301,L] RedirectMatch ^/$ http://www.domain.com/wiki RewriteCond %{REQUEST_URI} ^/wiki$ RewriteRule ^(.*) /wiki/index.php?title=Main_Page [L]
 * 1) Redirect http://domain.com to http://www.domain.com

RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^wiki/(.*) wiki/index.php?title=$1 [PT,L,QSA]

~/web_root/wiki/LocalSettings.php

Rewrite
サーバが"wiki/article"のために"w/index.php?title=article"を読み込むことが出来るようにURLを書き換えることが出来ます.

ルートアクセス
以下の方法ではサーバコンフィギュレーションへのアクセス権限が要求されます. 共有サーバを使用している場合はほとんどが利用できません; 上記の'No root access'をご覧下さい.

httpd.confでエイリアスを使用する
ビューのパフォーマンスポイントから望ましい方法ですが、httpd.confへのアクセス権限が要求されます. '''大抵の共有ホストシステムはhttpd.confの変更は許可しません. ''' 下の方法はMediaWiki1.4.4で動作が確認されました.

1.LocalSettings.phpにおいて、これらのデフォルトの値を使用することを確認して下さい: wikiを/wといったサブディレクトリにインストールする場合、$wgScriptPath = "/w"を使用して下さい.

ファイル(例えばindex.php)をrootに設置する場合、LocalSettings.phpで$wgScriptPath = ""を使用します.

2. LocalSettings.phpで、次の内容を設定します: '''wiki記事スペースのためのバーチャルディレクトリは決して、本当のファイルを覆うもしくは隠したりすることは決してしません. とりわけ、ベースインストールディレクトリ、もしくはルートディレクトリは決して覆うことはありません. /wikiといったバーチャルなサブディレクトリになることはできます. '''(例えば、"/wiki/Article"を"/wiki/index.php?title=Articleに書き換えることは試さないで下さい)

3. Apacheのhttpd.confで次のエイリアスをセットアップして下さい. セクションか"エイリアス"セクションか一般的なサイトコンフィグになります. エイリアスにおいて、 の接頭辞は&mdashにインストールしたパスを表します; MediaWikiの が動作するディレクトリです. 接頭辞のものを実際のファイルシステムパスのために置き換えて下さい.

Alias /wiki "/filesystem/path/to/my/site/index.php" Alias /index.php "/filesystem/path/to/my/site/index.php"
 * 1) これは最後でこの順番でなければなりません!

例です::

Alias /wiki "c:/apache/www/w/index.php" Alias /index.php "c:/apache/www/w/index.php"

httpd.confの修正をした後、変更を適用するためにApacheを再起動します.

Apache rewrite
エイリアスメソッドが適さない場合(例えばPHPをCGIとして使用する)、Apacheのmod_rewriteルールを代わりに使用します. mod_rewriteはapacheのモジュールで、特定のリクエストURLを別のURLに変更することを可能にします. mod_rewriteはとても強力でかなり複雑ですが、ショートURLためにはシンプルなルールが要求されるだけです. 完全なmod_rewriteのマニュアルをここで読むことが出来ます.

ApacheはRewriteモジュールを読み込みます. httpd.confにおいて次の行を追加もしくはアンコメントしなければなりません: LoadModule rewrite_module modules/mod_rewrite.so

httpd.confの修正をした後に、変更を適用するためにApacheを再起動しなければなりません.

Apache 2を使用している場合、 をonにする必要があります. 標準的なApacheとPHPではデフォルトでonになっていますが、ベンダーの中にはこの設定を無効にしているものがあります.


 * Redhat Linux上のhttpd-2.0.40-21で修正された既知の問題です. 詳細についてはtalk pageをご覧下さい.

Lighttpdの書き換え
コンフィギュレーションの例です: ２つのファイルで変更することが2つあります:
 * wikiはhttpのroot dirの/w/ディレクトリにインストールされます.
 * index.phpを避けたい
 * /wiki/Articleにアクセスをしたい


 * lighttpd.conf
 * サーバモジュールでmod_rewriteを有効にする
 * 書き換えルールとして下記のコードを追加する:

url.rewrite-once = (    "(^/wiki/[^:]*[\./].*)" => "$1",     "^/wiki/([^?]*)(?:\?(.*))?" => "/w/index.php?title=$1&$2",       ) lighttpdを再起動した後に設定が動作します. このコードは十分な書き換えルールではないのでこのページのリンク、印刷可能なバージョンなどは/w/index.php?などは十分に動作しません. ですので熟練したユーザによってこのコードを調整する必要があります.
 * /w/LocalSettings.phpを編集します

記事のURLにサブディレクトリでサブドメイン
"wiki.example.com/foo"のようなサブドメインでMediaWikiを使用することが出来ます. 既にサブドメインを持っていることを前提とします: そうではない場合、セットアップするかホストに連絡します.


 * 1) "/wiki/index.php?title=foo"を"/wiki/foo"に短縮するために上記の方法の一つを使用して下さい.
 * 2) サブドメインで$wgServerをLocalSettings.phpに追加して下さい.
 * 3) MediaWikiがドメインにリンクできるようにLocalSettings.phpでの$wgScriptPath</tt>の値を空白にして下さい.

サブディレクトリ無しで記事URLの２つのサブドメイン
''綺麗な解決方法を探しましたが、Martin Cleaverの1.10を使用した場合は動作しませんでした - 生成されたURLはページ保存を失敗しました.

記事URLを短縮するこの方法は2つのサブドメインを使用します: 一つは記事URLを短くし、もう一つはすべてのファイルと"パーマネント"の記事URLのためです. 例えば、 http://wiki.example.com/Article_Title は記事のためのURLで、 http://static.wiki.example.com/wiki/index.php はindexファイルが実際に設置されている場所です. これを行うトリックはディレクトリの書き換え、と'wgArticlePath'と'wgScriptPath' 変数を使用することです.


 * 1) 2つのディレクトリを指定するサブドメインをセットアップして下さい. 例えば http://wiki.example.com/ と http://static.wiki.example.com のためにそれぞれ/var/www/wiki</tt>と/var/www/wikistatic</tt>です.
 * 2) /var/www/wikistatic/wiki</tt>ディレクトリでwikiファイルをインストールします(標準的なショートURL技術は求められた場合と同様にそのディレクトリで使用することが出来ます. "wiki"ディレクトリを使用できない場合、LocalSettings.php</tt>とindex.php</tt>から"/wiki"と"wiki/"を除外することで、ファイルを直接サブドメインのルートディレクトリに設置します. )
 * 3) LocalSettings.php</tt>ファイルにおいて、下記で示される変更をします.
 * 4) /var/www/wiki</tt>ディレクトリにおいて、"index.php"と".htaccess"を下記のように設置します.

LocalSettings.php
/var/www/wikistatic/wiki/LocalSettings.php</tt>

ノート: これらのラインは他の間にまき散らされるかもしれません. これらの変数がファイルに存在しない場合、追加して下さい.

index.php
/var/www/wiki/index.php</tt> 上記の2行の意味は以下の通りです:
 * 1) ワーキングディレクトリを他のサブドメインのディレクトリに設定する(MediaWikiファイルへの絶対パスで置き換える)
 * 2) そのディレクトリからindex.phpファイルを含む

.htaccess
/var/www/wiki/.htaccess</tt> RewriteEngine On RewriteBase / RewriteRule ^.*$ index.php?title=$0 [L,QSA]

上記の3行の意味は以下の通りです
 * 1) URL書き換えを有効にする
 * 2) 使用しているサブドメインのルートディレクトリをre-writerに伝える
 * 3) すべてのリクエストをindex.phpファイルに送る(このディレクトリ/サブドメイン)

ノート: このハックとMediaWikiのドキュメントはwgScriptPath</tt>とwgArticlePath</tt>にドメイン名を含むフルURLについて何も伝えていませんが、バージョン1.9.3で動作します. 唯一の問題はページがLocalSettings.phpの上記に示されるwgServer</tt>を２つの変数の前に置く場合です.

http://static.wiki.example.com サブドメインは他のサブドメインのアプローチで問題を除外します. このアプローチを使用するとき衝突するファイル名はまったく異なった名前空間にあるからです.

記事URLでサブディレクトリ無しのサブドメイン
http://wiki.example.com/Article_Title のようなURLを使用したい場合、インストール後に.htaccess</tt>とLocalSettings.php</tt>を以下のように変更をして下さい. MediaWikiが<tt>wwiki/</tt>にインストールされ、サブドメインがwikiのためだけで、メインページがMain_Pageということを前提とします. <tt>.htaccess</tt>はhttp://www.muscatelli.info/ のオーナーがdiscussion pageに投稿したものとほとんど同じです.

.htaccess
最初のステップは/Article_Titleのためのリクエストが正しく解釈されることです. wiki.example.comドメインのルートの.htaccessに次の行を追加します:

RewriteEngine On RewriteRule ^[^:]*\. - [L] RewriteRule ^[^:]*\/ - [L] RewriteRule ^/*$ /wiki/index.php?title=Main_Page [L,QSA] RewriteRule ^(.+)$ /wiki/index.php?title=$1 [L,QSA]
 * 1) ドットとコロンを含むものはそのまま
 * 1) コロン無しでスラッシュを含むものがそのまま
 * 1) メインページへのリダイレクト
 * 1) そのほかはタイトルとして取り扱われる

LocalSettings.php
これで http://wiki.example.com/Article_Title のようなURLは動作します. 残っていることはMediaWikiにこれらのURLを使うように伝えることです. これは<tt>LocalSettings.php</tt>で<tt>$wgArticlePath</tt>を定義することでなされます. 次のコードが例で<tt>$wgScriptPath</tt>の直後に定義します:

mod_rewriteを使用して記事URLでサブディレクトリ無しのサブドメイン
Apacheのmod-rewriteは http://yourdomain/pagename のようなもっとも短いURLを可能にします. mod_rewriteは不正にフォーマットされた"フレンドリーな"URLリクエストをいつものようにindex.phpスクリプトで指示された適切なリクエストに変更します. mod_rewriteを使用するためには、条件のパターンと、条件パターンに一致する場合にURLに適応する変換ルールを指定します. 次のコードが例です: RewriteEngine On   RewriteCond %{REQUEST_URI} !^/w.*/ RewriteRule ^/(.*) /wiki/index.php/$1 [L] この書き換え条件は小文字のWで始まり、フォワードスラッシュで終わるURLには言及していません. これは古いスタイルの記事リクエストや、スクリプトや画像のような内部MediaWikiのファイルへのリクエストを保護します. wikiの語句を特別に使用することなく、この条件でのwikiは/www/mediaといったwiki外部のウェブドキュメントの他のディレクトリを許可します.

書き換えルールはリーディングスラッシュの後で記事名になるものすべてがURLをそれに応じてリフォーマットすることを前提とします. また、フレンドリーなフォームをリンク表示のデフォルトの方法にするために<tt>$wgArticlePath = "/$1"</tt>はLocalSettings.phpに設定されます. クエリ文字列を含むリンクは通常のフォーマットを使用します.

これは下記の方で説明されているManual:Short URLの問題を回避する技術を使用しています.

Lighttpdを使用して記事URLでサブディレクトリ無しでサブドメイン
LighttpdサーバでMediaWikiをルートディレクトリに設置するために、次のルールを使用します(mod_rewriteが読み込まれていることを前提とします):

url.rewrite-once = (   "(^/[^:]*[\./].*)" => "$1",    "^/([^?]*)(?:\?(.*))?" => "/wiki/index.php?title=$1&$2", )

個別のドメイン上(ルートディレクトリでwikiのために非常に可能性が高い)でこれをホストしたい場合、次の内容の設定をします:

$HTTP["host"] == "wiki.example.com" { server.document-root = "/path/to/webroot" url.rewrite-once = (       "(^/[^:]*[\./].*)" => "$1",        "^/([^?]*)(?:\?(.*))?" => "/wiki/index.php?title=$1&$2",    ) }

タイトルにアンパサンド(&)を使えるようにしたい場合(もしくはクエリ文字列において引数の区切り文字を考慮する他の文字列)、mod_magnetを使用することでもっと複雑なルールを作成することが出来ます. さらに詳しい情報はlighttpdのmod_magnetについてのドキュメントについてご覧下さい.

Apache rewriteを使用してルートURL上でwiki、2番目のwikiとrailsアプリを有効にする
きれいな構造で、ルートURL上でwikiを、下位のURL上で2番目のwikiとrailsアプリケーションを有効にします.

URL構造の例 http://example.com/ http://example.com/wiki_main/index.php?title=Main_Page http://example.com/Special:Recentchanges http://example.com/wiki_main/Special:Recentchanges http://example.com/wiki_main/index.php?title=Special:Recentchanges
 * 一番目のwiki -Main_Page
 * 一番目のwiki - Special:Recentchanges

http://example.com/wiki_other/Main_Page http://example.com/wiki_other/index.php?title=Main_Page
 * 二番目のwiki - Main page

http://example.com/wiki_other/Special:Recentchanges http://example.com/wiki_other/index.php?title=Special:Recentchanges
 * 二番目のwiki - Special:Recentchanges

http://example.com/weblog/ http://example.com/weblog/controller
 * Railsアプリケーション

適切なディレクトリ構造 web/ example_com/ cgi-bin/ htdocs/ .htaccess weblog -> ../rails/public weblog.html wiki_main/ .htaccess LocalSettings.php [usual mediawiki files] wiki_other/ .htaccess LocalSettings.php [usual mediawiki files] rails/ blogapp/ .htaccess app/ config/ db/ public/ vendor/

<tt>weblog</tt>は<tt>/web/example_com/rails/blogapp/public</tt>へのシンボリックリンクです.

<tt>/web/example_com/htdocs/.htaccess</tt>の内容 Options FollowSymLinks RewriteEngine On

RewriteCond %{REQUEST_URI} ^/Main_Page RewriteRule ^(.*) / [R,L]
 * 1) URLからMain_Pageを隠す

RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !^/wiki_main/ RewriteRule ^(.*) /wiki_main/index.php/$1 [L]
 * 1) ファイルが実際のものであるなら、このルールをスキップする

RewriteRule ^$ /wiki_main/index.php/Main_Page  [PT,L]
 * 1) http://example.comは一番目のwikiのフロントページを表示する


 * <tt>/web/example_com/htdocs/wiki_main/.htaccess</tt>の内容
 * <tt>/web/example_com/htdocs/wiki_other/.htaccess</tt>の内容

Options FollowSymLinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.+)$ index.php?title=$1 [L,QSA]

<tt>/web/example_com/htdocs/wiki_main/LocalSettings.php</tt>の修正 $wgArticlePath = "/$1";

<tt>/web/example_com/htdocs/wiki_other/LocalSettings.php</tt>の修正 $wgArticlePath = "$wgScriptPath/$1";

<tt>/web/example_com/htdocs/weblog.html</tt>の内容

<meta http-equiv="Refresh" content="0; url=http://example.com/weblog/" />

IIS6とショートURLのサポート
IIS6は動作するためにISAPI URL Rewriteフィルタを必要とします. いくつかの市販のフィルタが利用可能です. Ionic's Isapi Rewrite Filter (IIRF)はオープンソースで無料のISAPIフィルタで http://www.codeplex.com/IIRF から入手可能です. 2007年8月時点でIIRFのバージョン1.2.12cはWindows Server 2003 SP1とIIS6とMediaWiki 10.1で動作します. IIRFはIIS 5.0 (Windows 2000)とIIS 5.1 (Windows XP)とも互換性があるので、他のIIS実装はサポートされているようです.


 * インストールの取扱説明書はダウンロードパッケージのIIRFのウェブサイトで利用可能です.
 * IIRFにはインストールのサポートをする総合フォーラムがあります.
 * IIRFの設定を成功するために、INIファイルはMediWikiのためにカスタマイズしなければなりません. 下の記事で詳細をご覧下さい.

wiki.domain.com/wiki/でMediaWikiのためのINIファイルのサンプル: (IsapiRewrite4.iniはIsapiRewrite4.dllと同じパスに保存されてます) RewriteLog c:\temp\iirfLog.out RewriteLogLevel 3 MaxMatchCount 1 RewriteEngine On

RewriteCond %{HTTP_HOST} ^wiki.domain.com
 * 1) ドメインに適合するように変更します

RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d
 * 1) ローカルファイルの存在を確認して、.css、,jsと他のMediaWikiのファイルが処理されないようにします.

RewriteRule ^/wiki/(.*)$ /wiki/index.php?title=$1 [I,L] IterationLimit 4

次の記事もご覧下さい: URL rewrite in IIS

ボットがindex.phpを巡回することを防止する
検索エンジンがアクションビュー( のURLフォームで編集もしくは履歴ページ)をインデックス化することなく実際のwikiページだけインデックスを付けるようにすることが出来ます. 注意 ショートURLの実装無しでこれをする場合、すべてのページがインデックスにされることからブロックされてしまいます.

MediaWikiインストレーションのルートで<tt>robots.txt</tt>ファイルを作成して次の内容を追加します. User-agent: * Disallow: /index.php

トレイリングスラッシュを無視する
トレイリングスラッシュでページがアクセスされたとき、MediaWikiは異なるページと見なします. - (<tt>Page</tt>の代わりに<tt>Page/</tt>). 解決方法は以下の通りです.

~/web_root/.htaccess
Options FollowSymLinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.+)$ index.php?title=$1 [L,QSA]

~/web_root/LocalSettings.php
$wgArticlePath = "$wgScriptPath/$1"; $GLOBALS['_REQUEST']['title'] = preg_replace("/^(.+)\/$/", "$1", $GLOBALS['_REQUEST']['title']);

URIでエスケープされた文字を許可する
<tt>+</tt>といった特別な文字を記事のタイトルで使用を許可するための方法です. Apache 2.xを使用して<tt>.htaccess</tt>ファイルへのアクセス権限がある場合のみです.

~/web_root/.htaccess
RewriteEngine on RewriteBase /

RewriteRule ^wiki$ wiki/Main_Page [R,NC] RewriteRule ^wiki/$ wiki/Main_Page [R,NC]

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /wiki/([^?\ ]+) RewriteRule ^wiki/(.+)$ /w/index.php?title=%1 [NE,L,QSA]

ApacheとPHPがURLにある<tt>%2B</tt>をスペースで置き換えるをするために共同作業をする前に<tt>RewriteCond %{THE_REQUEST}...</tt>を使うことでクエリをキャッチします.

ディレクトリエラーが繰り返される
次のようなエイリアス/書き換えのエラーのループを受け取ってはいないでしょうか: 'Cannot find page www.example.com/wiki/wiki/wiki/wiki/wiki/ [...] /index.php' $wgServerが$wgScriptPath、$wgScriptと$wgArticlePathと重複をしていないことを確認して下さい. 次のコードはしてならない例です:

最初の2つの変数の両方とも"/wiki"で終わっているためhttpd.confにある'Alias /index.php /filesystem/path/to/my/site/index.php'の行は代わりにサイト全体上のどのindex.phpファイルを壊れたルーピングエイリアス状態にリダイレクトします. $wgServerが上記で述べた変数の内容を含まないことを確認して下さい.

上記に基づいたセットアップをもたらすには、'wiki'を'w'にリネームすることを仮定します: /wiki

/var/www/w/LocalSettings.php
注意: ウェブルートの位置は変わる可能性があります - /var/wwwではないかもしれません

httpd.conf
Alias /wiki /var/www/w/index.php Alias /index.php /var/www/w/index.php
 * 1) これらの行を一番下でこの順番で追記する

注意: Windowsは空白がない場合でもエイリアスのためにパス周辺の引用句を優先する傾向にあります. ウェブルートが/var/wwwではない場合、変更する必要があります

Keywords to help search find this page: Short Shorter Shorten short shorter shorten URL Url url URLs urls pretty prettier Pretty Prettier tiny Tiny

タイトルでアンパサンドと他のエンコードされた文字
ページタイトルが次のような記号を含むときにリンクで正しくエンコードされたにもかかわらず、mod_rewriteからスクリプトへ正しく渡されないという問題が起こります. この問題は404エラーで明白になります. タイトルが特別な文字で切り取られてしまうからです. 例えば"John & Maria's page"をクリックすると404エラーになります. MediaWikiが"John "というページ名を探すからです.

この問題を抱えていましたら、長いフォーマットの<tt>...index.php?title=pagename</tt>の代わりにリクエストしたURLをセミフレンドリーな形式の<tt>.../wiki/index.php/pagename</tt>に変換してみて下さい. これをする理由は長いフォームを使用することは記事が自身の名前にアンパサンドを持たないという意味があるからです. それらはクエリ文字列セパレータとして取り扱われ、決してPHPランタイムに到達しません. セミフレンドリーなフォーマットはindex.phpスクリプトがリクエストを取り扱うことをApacheが決定するために十分な記述です. MediaWikiはこのフォーマットのために準備をしてindex.phpハッシュでフルリクエスト情報から記事タイトルを直接取得します.

RewriteRule ^(.*[^/])/?$ /index.php?title=$1 [QSA,L] は次のようになります: RewriteRule ^(.*[^/])/?$ /index.php/$1 [QSA,L]

この原因はa long standing mod_rewrite bugです.

他の次善策が次のURLで議論されています:
 * http://lists.wikimedia.org/pipermail/mediawiki-l/2005-June/005814.html
 * http://fgiasson.com/blog/index.php/2006/07/19/hack_for_the_encoding_of_url_into_url_pr/

関連項目

 * Manual:Very short URL