Manual:短い URL/Apache

From MediaWiki.org
Jump to navigation Jump to search
This page is a translated version of the page Manual:Short URL/Apache and the translation is 99% complete.

Other languages:
Deutsch • ‎English • ‎français • ‎polski • ‎русский • ‎中文 • ‎日本語 • ‎한국어
Wikipedia's short URLs.

ここに記している手順は、Apacheで短いURLを設定するのに役立ちます。 LiteSpeed WebサーバーはApacheと互換性があり、比較的同じように設定できます。 短いURLとは何なのかや、他のサーバーの設定手順については、Manual:短い URL を参照してください。 どこかのウェブホスティングサービスを使ってていてウェブサーバの種類がわからないときは、恐らくApacheを使用していると考えて間違いないでしょう。

準備

設定を始める前に、仮想的な「短いURL」のパスを決めておく必要があります。

このマニュアルでは、以下の推奨内容になっていることを想定しています。あなたの決めたパスがこれと異なっていた場合は、忘れず値を読み替えるようにしてください。

  • MediaWikiが置かれたディレクトリ: /w
  • 希望する短いURLの形式: /wiki/Page_title

以後の作業は、自動化されたウィザードが行う処理に含まれています (MediaWiki 1.17以上):

すばやく設定作業をしたい場合や案内の内容がよく分からない場合は、まずはこのウィザードツールを試してみてください。 なお、ファイアウォールがある環境や非公開のウィキの場合、このツールは使えないので注意してください。 非公開ウィキでも、$wgGroupPermissions['*']['read']true に設定して一時的にウィキを公開すればツールを試すことができます。 作業を終えたら、忘れずに false に戻しておいてください。

このツールを使わないのでなければ、以下の指示にしたがって作業を進めてください。

サーバーの設定

編集すべきファイルを知る

Apacheで短いURLを設定するには、Apacheの設定ファイルを編集することをお勧めします。 これには、サーバー設定へのアクセス権が必要です。 共有ホストを使っている場合、その権限はないことが多いでしょう。そのときは代わりに.htaccessファイルを使ってください。 .htaccessファイルを使うやり方は効率が悪く、複数のドメインを使った複雑な設定をするときに必要となる設定をすべてを行うことはできません。しかし、ほとんどの短いURLではこれで十分です。 LiteSpeedユーザーは.htaccessを使うのがいいでしょう。

以下に記す2つの節のうちどちらか一方の手順にしたがって設定を進めてください。 どちらを使うべきかは、あなたがrootアクセス権を持っているのか、そうではなく代わりに.htaccessを使う必要があるのかに依存します。

Apache設定ファイルの場所を知る(rootアクセス権がある場合)

基幹設定を編集するためのファイルはさまざまな場所にある可能性があり、そのどれか一つが本当に編集すべきファイルになるでしょう。

ほとんどのLinuxディストリビューションでは、sites-available/sites-enabled/のフォルダにApacheの設定ファイルがあります。 編集すべき設定ファイルは、/etc/apache2/sites-available/の中にあってあなたのウィキに関する設定が書かれている設定ファイルです。 まだウィキに関する設定は行っておらず、初期状態の/var/wwwをウィキのディレクトリとして使っていた場合、/etc/apache2/sites-available/defaultを編集して設定することができます。

AllowOverride Allで設定上書きを有効化することを忘れないでください。 初期状態のUbuntu 12.04とUbuntu 12.10では無効になっています。

ディストリビューションにこれらのディレクトリがない場合は、Apache設定ファイルを直接編集する必要があります。 このファイルは/etc/apache2/apache2.confにあるはずです。 以前はhttpd.confという別の名前であったことに注意してください。httpd.confが存在し、apache2.confが存在しなかったときは、httpd.confが編集するべきファイルになります。

Apacheの設定ファイルがこれらいずれの場所にもないときは、Apacheのインストールに使用したシステムのマニュアルを参照し、そのファイルの場所を探してください。

Apacheの設定ファイルにアクセスできない共有ホストを使っている場合、代わりに.htaccessファイルを使用する必要があるでしょう。

Apache設定ファイルには、あなたのウィキに関する設定が書かれたVirtualHostブロックがあるでしょう。それがあるなら、ここが書き換えルールを設定する場所になります。 VirtualHostを使用している場合、RewriteRule設定をグローバル設定として書かないでください。RewriteRule設定はVirtualHostに継承されないからです。

上記のようにApacheの設定を行ったら、Apacheを再起動して新たな設定を反映させる必要があります。

  • PleskやcPanelを使っている場合、サーバーを再起動する方法が必要です。
  • コマンドラインを使う場合、通常はapache2ctl gracefulapachectl graceful/etc/init.d/apache2 restartのようなコマンドを、最新のFedoraであればsystemctl reload httpd.serviceを実行することになるでしょう。これらのコマンドはrootユーザとして実行する必要があるため、通常はsudo ...を前につけて実行することになります。

どこに.htaccessを置くのか

Apacheにおいて、.htaccess ファイルがサーバー設定を変更できるかどうかはAllowOverrideで制御されています。書き換えルールを .htaccess に設定しても全く反映されない場合、FileInfoを含むようApache設定ファイルのAllowOverrideを修正する必要があります。またディレクトリ設定中にOptions FollowSymLinksも必要です。

.htaccessファイルを使う場合、このファイルを編集します。存在しなければ新たに作成してください。スクリプトのパスとサイト上の仮想パスの両方を知っておく必要があります。通常、ウィキがあるサイトのトップディレクトリを指しますが、以下に示すいくつかの例を見てみることにしましょう。

wgScript Example wgArticlePath Example .htaccess location
/w/index.php http://www.mediawiki.org/w/index.php?... /wiki/Page_title http://www.mediawiki.org/wiki/Manual:Short_URL /.htaccess
/w/index.php http://www.mediawiki.org/w/index.php?... /Page_title http://www.mediawiki.org/Manual:Short_URL /.htaccess
/mediawiki/index.php http://www.mediawiki.org/mediawiki/index.php?... /view/Article http://www.mediawiki.org/view/Manual:Short_URL /.htaccess
/mysite/mw/index.php http://www.mediawiki.org/mysite/mw/index.php?... /mysite/view/Page_title http://www.mediawiki.org/mysite/view/Manual:Short_URL /mysite/.htaccess

メインドメインからウィキのメインページ(例:http://example.org/ → http://example.org/wiki/Main_Page)へのリダイレクトを設定する場合、常に最上位のディレクトリに .htaccess ファイルを置く必要があることに注意してください。例え他のディレクトリが深い階層にあったとしてもです。

書き換えルールの設定

この節の残りの部分は、Apacheの設定書式を一読してからの方が理解しやすいでしょう。ここに記す概略は完全なApacheマニュアルの代わりにはなりません。

RewriteCond TestString CondPattern
RewriteRule Pattern Substitution [flags]

RewriteCondディレクティブはRewriteRuleを適用する対象となる条件を規定します。RewriteRuleの前に一つ以上のRewriteCondディレクティブを書くことができ、URLに書き換えルールを適用するにはRewriteRuleの前にあるすべてのRewriteCondの判定結果が真となる必要があります。以下の例では、TestString%{ NAME_OF_VARIABLE }などのサーバー変数を参照する書式を使って条件を記しています。複数のCondPatternsがある場合、上記の例では-f(条件文が通常ファイルであった場合に真)と-d(条件文がディレクトリであった場合に真)を使い、これらの前に否定文字 ! を使っています。

RewriteRuleディレクティブはhttpd.confファイルからもいずれの.htaccessファイルからも呼び出すことができます。しかし、書き換えルールを.htaccess ファイル内に記した場合、ルールのパターンは暗黙のうちにディレクトリごとの設定の影響を受けます。なぜならルールは .htaccess があるディレクトリからの相対的なルールとなるからです。.htaccessファイル内に記した場合は相対的なものとはならず、元のURL全体に対するルールとなります。.htaccessファイルに記す場合、スラッシュ/で始まるパターンを書いてはいけません。なぜならURLの部分文字列は/で始まることはないからです。以下の例では、書き換え処理を即座に停止し、これ以上ルールは適用しないことを意味するLフラグを使っています。


ApacheやLiteSpeedのサーバーで、下記事例のようにmod_rewriteモジュールは必ず有効化しておいてください。
仮想ホストを使っている場合、設定はVirtualHost宣言の中に記すようにしてください。

設定ファイルの中で最初に記す必要のあるルールは、書き換えエンジンを有効化する指示です。

RewriteEngine On

ここで次に必要となるのが、記事のパスをindex.phpを指す仮想パスに変えるルールです。/wiki/w/index.phpはあなたが考えているものに置き換えてください(もし違っていれば)。

RewriteRule ^/?wiki(/.*)?$ %{DOCUMENT_ROOT}/w/index.php [L]
この設定をカスタマイズする場合、?title=$1 のような記述は決して含めないようにしてください。クエリを含めると MediaWiki に組み込まれた処理がオーバーライドされ、Apacheのクエリ書き換えが壊れてウィキに不具合が発生します。[1] ここでの目標は、LocalSettings.php に書かれた設定に基づいて /index.php へのエイリアスパスをつくり、MediaWikiが自身でURLを処理し目的のページに導くことです。

短いURLとして、通常のURLではなくサイトのトップURLを使う場合、以下の設定を使う必要があるでしょう(/index.php/imagesなどの既存ファイルやディレクトリが記事として見えてしまわないようにしています)。

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteRule ^(.*)$ %{DOCUMENT_ROOT}/w/index.php [L]
/mywiki/index.php/mywiki/Articleのようにスクリプトのパスと記事のパスが一致している場合、同じ2つのRewriteCond行をRewriteRuleに適用する必要が生じます。しかしこのように設定する本当に正当な理由はないことに注意してください。記事のパスが既にサブディレクトリになっている場合は、/w/index.php/mywiki/Articleあるいは/my/index.php/mywiki/Articleのようにウィキのスクリプトパスを別のディレクトリに移動するだけで済みます。

上記の例は動作しないことがあります。そんなときは代わりに以下のように設定すれば動作するでしょう(これは.htaccessに設定することはできません。この設定にはrootユーザでのアクセスが必要です!)

Alias /wiki /path/to/your/webroot/w/index.php

パス自体にメインページを表示するルールを組み込んで、ページタイトルが指定されていないURLでアクセスされたときの案内を簡単にすることもできます。

# / へのアクセスをメインページへリダイレクト
RewriteRule ^/*$ %{DOCUMENT_ROOT}/w/index.php [L]

最終的な結果は以下のようになるでしょう。

## https://www.mediawiki.org/wiki/Manual:Short_URL/Apache

# 書き換えエンジンを有効化
RewriteEngine On

# ウィキページへの短いURL
RewriteRule ^/?wiki(/.*)?$ %{DOCUMENT_ROOT}/w/index.php [L]

# / へのアクセスをメインページにリダイレクト
RewriteRule ^/*$ %{DOCUMENT_ROOT}/w/index.php [L]

or, if you used the way with the "Alias" statement:

## https://www.mediawiki.org/wiki/Manual:Short_URL/Apache

Alias /wiki /path/to/your/webroot/w/index.php
# 書き換えエンジンを有効化
RewriteEngine On

# / へのアクセスをメインページへリダイレクト
RewriteRule ^/*$ %{DOCUMENT_ROOT}/w/index.php [L]
ルールの記述順序は例と同じになっていることを確認してください。「ウィキページへの短いURL」は「/ へのアクセスをメインページへリダイレクト」よりも前にチェックされる必要があります。
設定中にある^/?は重要です。なぜならApacheの設定によって正規表現が異なるからです。^wiki/を使いたい人もいれば、^/wiki/を使いたい人もいるでしょう。/?の中にある?によってどちらの書き方でもこのルールが動作するようになります。
設定中の%{DOCUMENT_ROOT}によってApacheが正しく曖昧さをなくしたパスを持てるようになります。しかし正しく設定されていないフリーのホストでは正しく動作しません。あなたが記したRewriteRuleの設定で404や403のエラーコードが返るようであれば、%{DOCUMENT_ROOT}の部分を削除して再度試してみてください。
SCRIPT_PATHが他の物理的場所につながる場合(Unixの「シンボリックリンク」やWindowsの「ショートカット」でそのようなことが起こります)、Apacheがそれらをたどれるよう設定する必要があるかもしれません。RewriteEngineより上に以下の行を記せばそう設定することができます。
Options +FollowSymLinks
Debianなどでみられるように、ウェブサーバでAliasディレクティブを指定しスクリプトディレクトリのパスをエイリアスにしていた場合、PTフラグ([L][PT,L]に変更する)を指定すればRewriteRuleは動作するでしょう。Stack Overflowにあるように、この設定によってリクエストは次のハンドラ mod_alias に通され、リクエストは正しくリダイレクトされるようになります。

LocalSettings.php

以下の設定をLocalSettings.phpに行う必要があります。

## https://www.mediawiki.org/wiki/Manual:Short_URL
$wgScriptPath = "/w";        // 既にこのように設定されているはずです
$wgArticlePath = "/wiki/$1";

設定完了後、「リダイレクトのループが検出されました!」と記された内部エラーページが表示されたら、mod_php以外のものを使っているのかも知れません。その場合は以下の行をLocalSettings.phpに記して短いURLを明示的に有効化する必要があります。

$wgUsePathInfo = true;

それでもまだ、サーバのログファイルに「内部エラー」が出ている場合、おそらくmod_rewriteモジュールを有効化する必要があるでしょう。

関連項目

脚注