目次
URL の書き換え
このページは無秩序なので、書き直す必要があります。
DokuWiki のデフォルト設定では URL を書き換えず、URL はこんな感じになります:
http://example.com/doku.php?id=page
このような URL は綺麗ではなく、索引化の対象外とする検索エンジンもあります。
デフォルトでは無効にされている URL の書き換えを有効にすることで解決します。
日本語での概要説明
手順
- 管理者メニューを開けます。
- サイト設定管理画面を開けます。
- 「URLの書き換え」を .htaccess に変更します。(下の方にあるので検索して下さい)
- その下にある「URL上の名前空間の区切りにスラッシュを使用」を有効にして下さい。
- 「保存」して下さい。
- 次に、FTP やファイルマネージャを使用して、wikiを作成した /wiki/ フォルダにアクセスします。
- 中に .htaccess というファイルがあるはずです。(見えない場合、隠しファイルを表示するようにして下さい。レンタルサーバー独自のログイン時のオプションかもしれませんし、単純に .htaccess ファイルを作成してアップロードするだけかもしれません)
- .htaccess ファイルに以下を貼り付けます。
RewriteEngine on RewriteRule ^_media/(.*) lib/exe/fetch.php?media=$1 [QSA,L] RewriteRule ^_detail/(.*) lib/exe/detail.php?media=$1 [QSA,L] RewriteRule ^_export/([^/]+)/(.*) doku.php?do=export_$1&id=$2 [QSA,L] RewriteRule ^$ doku.php [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*) doku.php?id=$1 [QSA,L] RewriteRule ^index.php$ doku.php
これで www.myexample.com/wiki-article のような形式になるはずです。 www.myexample.com/dokuwiki/wiki-article のような異なる形式の場合、以下の行をRewriteEngine on 直下に追加して下さい。
RewriteBase /dokuwiki
/dokuwiki は、実際に使用しているフォルダーの名前に変更する必要があります。
技術的に熟知するための詳細説明
設定項目: userewrite を有効にすることで、DokuWikiは二種類の URL 書き換えに対応しています。 一つは、Web サーバーの書き換え機能に依存しています。 もう一つは、DokuWiki 内部で書き換えられた URL を処理します。 次の表は、これらのオプションをまとめたものです。
設定値 | 概要 | URL 例 |
---|---|---|
0 | URL を書き換えません。デフォルト設定です。 | http://example.com/dokuwiki/doku.php?id=wiki:syntax |
1 | URL の書き換えは、Webサーバーが処理します。 | http://example.com/dokuwiki/wiki:syntax |
2 | URL の書き換えを DokuWiki が行います。 | http://example.com/dokuwiki/doku.php/wiki:syntax |
URL の書き換えはデフォルトでは無効になっています。 適切な設定オプションを設定する以外に、追加の設定が必要なためです。 これらの設定については、以下で説明します。
URL の書き換えは ?do=admin&page=config#_advanced
かローカルの conf/local.php ファイルの $conf['userewrite'] = N;
行で変更できます。
N は数字の 0〜2 です。
デフォルトは、この行が存在せず 0 扱いです。
いずれかのオプションを選択するには、以下の設定手順に従ってください。
オプション 1:Web サーバー
設定管理 /start?do=admin&page=config
内で以下の設定を忘れないで下さい。
- URLの書き換え: .htaccess
- URL上の名前空間の区切りにスラッシュを使用 [x]
そうしないと書き換えルールが有効になりません。
Apache
Apacheの場合、URL書き換えは Apache 1 または Apache 2 の mod_rewrite モジュールを使います。
DokuWiki には .htaccess.dist
ファイルが付属しています。
このファイルにはオプション 1 に必要な書き換えルールが含まれています。
以下に例を示します:
RewriteEngine on RewriteBase /dokuwiki RewriteRule ^_media/(.*) lib/exe/fetch.php?media=$1 [QSA,L] RewriteRule ^_detail/(.*) lib/exe/detail.php?media=$1 [QSA,L] RewriteRule ^_export/([^/]+)/(.*) doku.php?do=export_$1&id=$2 [QSA,L] RewriteRule ^$ doku.php [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*) doku.php?id=$1 [QSA,L] RewriteRule ^index.php$ doku.php
RewriteBase /dokuwiki
行で、wiki を取得するために URL 内で使用するディレクトリに /dokuwiki
を置き換える必要があるかもしれません。
http://example.com のような wiki のスタートページがドメインの最上位に表示される場合、以下の行を使用します: RewriteBase /
。
ファイル名を .htaccess.dist
から .htaccess
に変更する必要もあります。
Apachectl status 破壊
DokuWiki 書き換えルールは apachectl status コマンドに影響し、サーバーステータスページの代わりにDokuWiki 404 ページを返すようになります。 どちらかの方法で修正可能です。 DokuWiki 書き換えルールにこれを置く
RewriteCond %{REQUEST_URI} !^/server-status$
または、doku.php が配置されている DokuWiki のルートフォルダ内に空の server-status ファイルを作成する。 Apachectl status is broken with dokuwiki というフォーラムの投稿を参照して下さい。
404 not found エラー
これを実行する必要があるかもしれません。
IIS (あるいは Microsoft Azure Web アプリ)
URLの書き換えを有効にして、適切なルールの組み合わせを挿入します:
<rewrite> <rules> <rule name="rule 1C" stopProcessing="true"> <match url="^_media/(.*)" /> <action type="Rewrite" url="/lib/exe/fetch.php?media={R:1}" appendQueryString="true" /> </rule> <rule name="rule 2C" stopProcessing="true"> <match url="^_detail/(.*)" /> <action type="Rewrite" url="/lib/exe/detail.php?media={R:1}" appendQueryString="true" /> </rule> <rule name="rule 3C" stopProcessing="true"> <match url="^_export/([^/]+)/(.*)" /> <action type="Rewrite" url="/doku.php?do=export_{R:1}&id={R:2}" appendQueryString="true" /> </rule> <rule name="rule 4C" stopProcessing="true"> <match url="^$" /> <action type="Rewrite" url="/doku.php" /> <conditions> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> </rule> <rule name="rule 5C" stopProcessing="true"> <match url="(.*)" /> <action type="Rewrite" url="/doku.php?id={R:1}" appendQueryString="true" /> <conditions> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> </rule> <rule name="rule 6C"> <match url="^index.php$" /> <action type="Rewrite" url="/doku.php" /> </rule> </rules> </rewrite>
**Azure Web アプリを使用している場合、Web アプリの wwwroot 直下の web.config ファイルの中にある <system.webServer> タグ内にこれらの行を追加するだけです。
このルールはどこに挿入すべきなのでしょうか?!
IIS 7.0 以降
IIS 7.0 以降は、URL Rewrite module 2.0 で拡張することができます。 x86 用と x64 用を Microsoft が提供しています。
“RewriteBase /dokuwiki” 行を削除した上記の Apache のルールを .htaccess ファイルに保存します。 wiki のルートに直接ルールを追加するので、この行は不要です。
IIS Manager で Wiki フォルダを選択して、IIS の「URL Rewrite」を選択します。 (インストール作業前に、マネージャ開いていた場合、再読み込みが必要です。)
右側のアクション欄で「Import Rules…」を選択してください。
設定ファイルとして .htaccess ファイルを選択し「Import」します。これで6個の変換ルールが作成されるはずです。
最後に、右側のアクション欄の「Apply」をクリックします。
書き換えに .htaccess ルールを使用するように設定項目: userewrite を設定し、書き換えた URL を試してみて下さい。
Nginx
nginx のマニュアルを参照して下さい。 以下の例では、サーバールートは /var/www 出力する dokuwiki は /var/www/wiki です。
server { listen 80; server_name example.com www.example.com; #maximum file upload size is 4MB - change accordingly if needed client_max_body_size 4M; client_body_buffer_size 128k; root /var/www/wiki; index doku.php; location / { try_files $uri $uri/ @dokuwiki; } location @dokuwiki { rewrite ^/_media/(.*) /lib/exe/fetch.php?media=$1 last; rewrite ^/_detail/(.*) /lib/exe/detail.php?media=$1 last; rewrite ^/_export/([^/]+)/(.*) /doku.php?do=export_$1&id=$2 last; rewrite ^/(?!lib/)(.*) /doku.php?id=$1&$args last; } location ~ \.php$ { if (!-f $request_filename) { return 404; } include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param REDIRECT_STATUS 200; fastcgi_pass 127.0.0.1:9000; } }
注
https 使用する場合、HTTPS サーバー変数は DokuWiki 中の propper リンクを許可する設定にする必要があります。 これは、server セクションで行います:
fastcgi_param HTTPS on;
location 設定前の rewrite ルール内のキーワード last
は書き換えが一度だけ行われる設定です。
上に登場した全ての /dokuwiki/ は、Web サーバのルートディレクトリからの相対 wiki ディレクトリに置き換えてください。
これらの設定をコピー&ペーストしている場合、セキュリティページの説明通りに、特定のディレクトリのセキュリティを確保するために location を追加していることを確認して下さい。
オプション 2:DokuWiki
conf/local.php ファイル内のこの行を追加・変更し、再読み込みします:
$conf['userewrite'] = 2; |
このオプションの場合、Web サーバーの設定変更は不要です。 ただし、Apache に実装されているような CGI 標準の PATH_INFO 機能に依存しています。 IISは、この設定では動作しないことが知られています。 しかし、IIS の新しいバージョンはこれで動作するようです。
PHP セッション ID の消去
“clean” URL を使用しているにもかかわらず、以下のような “DokuWiki” パラメータが発生する場合があります:
PHP セッション ID:
http://example.com/example?DokuWiki=c81a95369a66576982119e2a60b557a5
このパラメータは PHP セッション ID で、自動的に PHP が追加します。
書き換えとは全く無関係です。
回避するには、session.use_only_cookies
オプションを設定して、PHP に対してセッション用には常にクッキーを使用することを強制できます。
通常、php.ini 設定ファイルの編集で対応します:
session.use_only_cookies=1
以下も試して下さい:
session.use_trans_sid=0