ユーザ用ツール

サイト用ツール


wiki:urlの書き換え

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

wiki:urlの書き換え [2017/01/12 ] (現在)
N_Miya 作成
ライン 1: ライン 1:
 +====== URL の書き換え ======
 +
 +FIXME このページは無秩序なので、書き直す必要があります。
 +
 +DokuWiki のデフォルト設定では URL を書き換えず、URL はこんな感じになります: ​
 +
 +  http://​example.com/​doku.php?​id=page
 +
 +このような URL は綺麗ではなく、索引化の対象外とする検索エンジンもあります。
 +
 +デフォルトでは無効にされている URL の書き換えを有効にすることで解決します。
 +
 +===== 日本語での概要説明 =====
 +
 +==== 手順 ====
 +
 +  - 管理者メニューを開けます。
 +  - サイト設定管理画面を開けます。
 +  - 「URLの書き換え」を .htaccess に変更します。(下の方にあるので検索して下さい)
 +  - その下にある「URL上の名前空間の区切りにスラッシュを使用」を有効にして下さい。
 +  - 「保存」して下さい。
 +  - 次に、FTP やファイルマネージャを使用して、wikiを作成した /wiki/ フォルダにアクセスします。
 +  - 中に .htaccess というファイルがあるはずです。(見えない場合、隠しファイルを表示するようにして下さい。レンタルサーバー独自のログイン時のオプションかもしれませんし、単純に .htaccess ファイルを作成してアップロードするだけかもしれません)
 +  - .htaccess ファイルに以下を貼り付けます。
 +
 +<code apache>
 +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
 +</​code>​
 +
 +これで www.myexample.com/​wiki-article のような形式になるはずです。
 +www.myexample.com/​dokuwiki/​wiki-article のような異なる形式の場合、以下の行を**RewriteEngine on** 直下に追加して下さい。
 +
 +<code apache>
 +RewriteBase /dokuwiki
 +</​code>​
 +
 +/dokuwiki は、実際に使用しているフォルダーの名前に変更する必要があります。
 +
 +===== 技術的に熟知するための詳細説明 =====
 +
 +[[ja:​config:​userewrite|設定項目:​ 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 の書き換えはデフォルトでは無効になっています。
 +適切な[[ja:​config:​userewrite|設定オプション]]を設定する以外に、追加の設定が必要なためです。
 +これらの設定については、以下で説明します。
 +
 +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書き換えは [[http://​httpd.apache.org/​docs/​1.3/​mod/​mod_rewrite.html|Apache 1]] または [[http://​httpd.apache.org/​docs/​2.0/​mod/​mod_rewrite.html|Apache 2]] の **mod_rewrite** モジュールを使います。
 +
 +DokuWiki には ''​.htaccess.dist''​ ファイルが付属しています。
 +このファイルにはオプション 1 に必要な書き換えルールが含まれています。
 +
 +以下に例を示します:
 +<code apache>
 +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
 +</​code>​
 +
 +''​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 ファイルを作成する。
 +[[http://​forum.dokuwiki.org/​post/​32858 | Apachectl status is broken with dokuwiki]] というフォーラムの投稿を参照して下さい。
 +
 +== 404 not found エラー ==
 +
 +[[https://​stackoverflow.com/​questions/​8551740/​centos-htaccess-not-being-read |これ]]を実行する必要があるかもしれません。
 +
 +==== IIS (あるいは Microsoft Azure Web アプリ) ====
 +
 +URLの書き換えを有効にして、適切なルールの組み合わせを挿入します:
 +
 +<code iis>
 +<​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}&​amp;​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>​
 +
 +</​code>​
 +
 +**Azure Web アプリを使用している場合、Web アプリの wwwroot 直下の web.config ファイルの中にある <​system.webServer>​ タグ内にこれらの行を追加するだけです。
 +
 +> このルールはどこに挿入すべきなのでしょうか?!
 +
 +=== IIS 7.0 以降 ===
 +
 +IIS 7.0 以降は、URL Rewrite module 2.0 で拡張することができます。
 +[[http://​go.microsoft.com/?​linkid=9722533|x86]] 用と [[http://​go.microsoft.com/?​linkid=9722532|x64]] 用を Microsoft が提供しています。
 +
 +"​RewriteBase /​dokuwiki"​ 行を削除した上記の Apache のルールを .htaccess ファイルに保存します。
 +wiki のルートに直接ルールを追加するので、この行は不要です。
 +
 +IIS Manager で Wiki フォルダを選択して、IIS の「URL Rewrite」を選択します。
 +(インストール作業前に、マネージャ開いていた場合、再読み込みが必要です。)
 +
 +右側のアクション欄で「Import Rules...」を選択してください。
 +
 +設定ファイルとして .htaccess ファイルを選択し「Import」します。これで6個の変換ルールが作成されるはずです。
 +
 +最後に、右側のアクション欄の「Apply」をクリックします。
 +
 +書き換えに .htaccess ルールを使用するように[[ja:​config:​userewrite|設定項目:​ userewrite]] を設定し、書き換えた URL を試してみて下さい。
 +
 +==== Nginx ====
 +
 +[[http://​nginx.org/​|nginx]] の[[http://​wiki.nginx.org/​NginxJa|マニュアル]]を参照して下さい。
 +以下の例では、サーバールートは /var/www 出力する dokuwiki は /​var/​www/​wiki です。
 +
 +<​code>​
 +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;​
 +    }
 +}
 +</​code>​
 +
 +=== 注 ===
 +
 +https 使用する場合、HTTPS サーバー変数は DokuWiki 中の propper リンクを許可する設定にする必要があります。
 +これは、server セクションで行います:
 +
 +  fastcgi_param HTTPS on;
 +
 +location 設定前の rewrite ルール内のキーワード ''​last''​ は書き換えが一度だけ行われる設定です。
 +上に登場した全ての /dokuwiki/ は、Web サーバのルートディレクトリからの相対 wiki ディレクトリに置き換えてください。 ​
 +
 +これらの設定をコピー&ペーストしている場合、[[:​security#​deny_directory_access_in_nginx|セキュリティ]]ページの説明通りに、特定のディレクトリのセキュリティを確保するために location を追加していることを確認して下さい。
 +
 +===== オプション 2:DokuWiki =====
 +
 +conf/​local.php ファイル内のこの行を追加・変更し、再読み込みします: ​
 +
 +| $conf['​userewrite'​] = 2; |
 +
 +このオプションの場合、Web サーバーの設定変更は不要です。 ​
 +ただし、Apache に実装されているような CGI 標準の PATH_INFO 機能に依存しています。
 +IISは、この設定では[[bug>​718|動作しないことが知られています]]。
 +しかし、IIS の新しいバージョンはこれで動作するようです。
 +
 +==== PHP セッション ID の消去 ====
 +
 +"​clean"​ URL を使用しているにもかかわらず、以下のような "​DokuWiki"​ パラメータが発生する場合があります:​
 +
 +PHP セッション ID: 
 +<​code>​
 +http://​example.com/​example?​DokuWiki=c81a95369a66576982119e2a60b557a5
 +</​code>​
 +
 +このパラメータは PHP セッション ID で、自動的に PHP が追加します。
 +書き換えとは全く無関係です。
 +回避するには、''​session.use_only_cookies''​ オプションを設定して、PHP に対してセッション用には常にクッキーを使用することを強制できます。
 +
 +通常、php.ini 設定ファイルの編集で対応します:
 +
 +<code ini>
 +session.use_only_cookies=1
 +</​code>​
 +
 +以下も試して下さい: ​
 +<code ini>
 +session.use_trans_sid=0
 +</​code>​
 +
 +===== 関連項目 =====
 +
 +  * [[ja:​tips:​httpslogin|HTTPS でのログインを強制する]]
  
wiki/urlの書き換え.txt · 最終更新: 2017/01/12 by N_Miya