Manual:短縮URL/Apache
このページの一部 (Apache2 configuration instructions 関連) は直近の情報を反映していません。 |
ここに記している手順は、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.conf
で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 graceful
、apachectl graceful
、/etc/init.d/apache2 restart
のようなコマンドを、最新のFedoraであればsystemctl reload httpd.service
を実行することになるでしょう。これらのコマンドはrootユーザとして実行する必要があるため、通常はsudo ...
を前につけて実行することになります。
どこに.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
フラグを使っています。
まず、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]
^/?
は重要です。なぜならApacheの設定によって正規表現が異なるからです。^wiki/
を使いたい人もいれば、^/wiki/
を使いたい人もいるでしょう。/?
の中にある?
によってどちらの書き方でもこのルールが動作するようになります。%{DOCUMENT_ROOT}
によってApacheが正しく曖昧さをなくしたパスを持てるようになります。しかし正しく設定されていないフリーのホストでは正しく動作しません。あなたが記したRewriteRuleの設定で404や403のエラーコードが返るようであれば、%{DOCUMENT_ROOT}
の部分を削除して再度試してみてください。RewriteEngine
より上に以下の行を記せばそう設定することができます。Options +FollowSymLinks
[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.
関連項目