Manual:短縮URL/Apache

This page is a translated version of the page Manual:Short URL/Apache and the translation is 74% complete.
Wikipediaの短いURL。

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

導入

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

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

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

サーバーの設定

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

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

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

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

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

編集すべき設定ファイルは、/etc/apache2/sites-available/の中にあってあなたのウィキに関する設定が書かれている設定ファイルです。 ほとんどのLinuxディストリビューションでは、sites-available/sites-enabled/のフォルダにApacheの設定ファイルがあります。

まだウィキに関する設定は行っておらず、初期状態の/var/wwwをウィキのディレクトリとして使っていた場合、/etc/apache2/sites-available/defaultを編集して設定することができます。

忘れずに/etc/apache2/apache2.confAllowOverride 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 https://www.mediawiki.org/w/index.php?... /wiki/Page_title https://www.mediawiki.org/wiki/Manual:Short_URL /.htaccess
/w/index.php https://www.mediawiki.org/w/index.php?... /Page_title https://www.mediawiki.org/Manual:Short_URL /.htaccess
/mediawiki/index.php https://www.mediawiki.org/mediawiki/index.php?... /view/Article https://www.mediawiki.org/view/Manual:Short_URL /.htaccess
/mysite/mw/index.php https://www.mediawiki.org/mysite/mw/index.php?... /mysite/view/Page_title https://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フラグを使っています。

仮想ホストを使っている場合、設定はVirtualHost宣言の中に記すようにしてください。

まず、Apache や LiteSpeed で mod_rewrite モジュールを有効にしてください。 For Apache use the command sudo a2enmod rewrite followed by sudo systemctl restart apache2.

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

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 %{REQUEST_URI} !^/w/rest\.php
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モジュールを有効化する必要があるでしょう。

Simple instructions

The following is a summary of what to do if you are not doing anything different than what MediaWiki recommends. If you want to do something else, you need to read all of the details above.

  • https://example.com/wiki/Main_Page (url location)
  • /home/me/public_html/mediawiki/w/index.html (index.html location)
  • /home/me/public_html/mediawiki/.htaccess (.htaccess location)

Notice that the .htaccess file is NOT located in the "w" directory, but it is located in the directory above it.

.htaccess source code

RewriteEngine On

# main rewrite rule
RewriteRule ^/?wiki(/.*)?$ %{DOCUMENT_ROOT}/w/index.php [L]

# Redirect / to Main Page
RewriteRule ^/*$ %{DOCUMENT_ROOT}/w/index.php [L]

LocalSettings.php source code

$wgScriptPath = "/w";
$wgArticlePath = "/wiki/$1";

Online Wizard

It is possible that this wizard will help people generate the short URLs they need. (NOTE: This needs to be tested, or the section removed.)

An automated wizard (requires MediaWiki 1.17 or later) might help:

If you just want your wiki configured quickly or you find the guide confusing then you may want to try that tool first. If you do this, please note that you will need to edit or create a .htaccess file. If you create it anew, please read on to further in this article about where to place the .htaccess file, and please note that this file will likely be in a different folder than the other file that will need to be edited (LocalSettings.php), which is in the installation folder (/w if you have followed the MediaWiki recommendations). Please also note that using this wizard will not work on firewalled or private wikis. In this case, you can still try it out by making your wiki temporarily public by setting $wgGroupPermissions['*']['read'] to true. Remember to change it back to false once you are done.

関連項目

脚注