IIS7

You are browsing the archives of IIS7.

FastCGI拡張forIISでREQUEST_URIが文字化けする

Wordpressをアップデートしたら元に戻ってしまったのでメモ。

URLのパスや引数の名前に含まれるURLエンコード部分の文字列が、なぜかShift-JISで飛んできます。URLエンコード前の文字列が日本語などでなければ大丈夫。

どっかの設定が悪いのかなんなのか。変な設定とかしてないんですけどねぇ。

Wordpressの場合の対処はこんな感じ。

classes.phpの152行目あたりにこんなコードを追記する。

$_SERVER['REQUEST_URI'] = mb_convert_encoding($_SERVER['REQUEST_URI'],’UTF-8′,’SJIS’);
$_SERVER['PATH_INFO'] = mb_convert_encoding($_SERVER['PATH_INFO'],’UTF-8′,’SJIS’);

Windows7をお持ちの方は、WebPlatform Instaler 2.0で、マウスだけでインストール出来るのでお試しあれ。

VistaのIIS7でWordpress

Windows VistaというかIIS7でWordpressを動かすメモ。

ローカル環境でWPをいじる環境を作るのが目的なのでWindows Vistaを対象にしていますが、原則WindowsServer2008でも同じやり方でインストールできるはずです。

IIS7.0とPHPをインストール&設定する

http://technet.microsoft.com/ja-jp/library/cc732624.aspx

↑こことかを参考に、IIS7.0をインストールします。Vista Home Premiumでもインストールできる様子。

FastCGI for IIS7のインストール

基本的には、Vista SP1であれば既にFastCGIが組み込まれているはずです。

 既にIIS 7.0をインストールしてしまっている場合、IIS 7.0を有効化してからSP1をあてた場合など、現在稼働中のIIS7でFastCGIモジュールが確認できない場合、FastCGI単品でのインストールも可能です。

FastCGI for IIS7

http://www.iis.net/downloads/default.aspx?tabid=34&i=1299&g=6

 いずれにしても、SP1適用後に、IISの無効化→有効化を行えば、FastCGIが使えるようになるはずです。

コントロールパネル > プログラムと機能 > Windowsの機能の有効かまたは無効化

  wp01

IIS7の管理コンソールからの設定

コントロールパネル > 管理ツール > インターネット インフォメーション サービス (IIS) マネージャ

から、IISの管理コンソールを開きます。IIS5.1、IIS6と違い、3ペイン構成になっています。

左ペインより、Default Web Siteを選択し、中央のペインのモジュールをダブルクリックすると、そのIISで利用できるモジュールの一覧が表示されます。

その中に、FastCgiModuleが含まれていることを確認します。

 wp02

PHPの有効化

 http://www.php.net/downloads.php

公式サイトより、PHPのバイナリをダウンロードして、C:\phpなどに配置します。

2009年4/12現在での最新はPHP 5.2.9-2 Non-thread-safe zip packageでした。

Non-thread-safe版をダウンロードし、c:\phpに配置したら、php.ini-recommendedを編集し、php.iniとリネームしておきます。

このあたりは通常のphpの設定と大差ありません。最低限必要なのは、

extension_dir = “C:\php\ext”

と、

extension=php_gd2.dll
extension=php_mbstring.dll
extension=php_mcrypt.dll
extension=php_mhash.dll
extension=php_mysql.dll
extension=php_openssl.dll
extension=php_sockets.dll
extension=php_xmlrpc.dll
extension=php_zip.dll

これぐらいです。Wordpressの動作には必要のないものも含まれていますが、まぁよく使う拡張はこれぐらいでしょう。

また、

cgi.force_redirect = 0

cgi.fix_pathinfo=1

IISでFastCGIを使う場合は、この設定をするべきのようですが、IIS7の場合は、設定しなくとも普通に動くようです。

同時に、[mail function]のSMTP=も、SMTPサーバーを指定しておくとよいですが、Wordpressの場合はプラグインでSMTPサーバーを指定する方が一般的かもしれません。

モジュールマップの追加

IIS管理画面に戻り、中央の画面からハンドラマッピングをダブルクリックします。と、拡張子とそれに対する利用モジュールのマッピング一覧が表示されます。

 wp03

この状態で、右のペインからモジュールマップの追加をクリックし、php-cgi.exeとFastCgiModuleを結びつけます。

 wp04

要求パスは*.php、モジュールはFastCgiModuleを選択、実行可能ファイルはC:\php\php-cgi.exeです。

名前はまぁ、適当にわかりやすいのをつけておき、OKします。これでIIS7でPHPが動作するようになりました。

既定のドキュメントの変更

デフォルトでは、index.phpが既定のドキュメントとして含まれないため、http://ドメイン名/でアクセスした場合、ファイルの一覧を表示しようとしてしまいます。

なので、index.phpを最優先で利用するよう、設定します。

Default Web Siteを選択し、既定のドキュメントをダブルクリックします。現在の既定のドキュメントの一覧が表示されるので、

右のペインから追加をクリックし、index.phpを追加、↑上へ移動で最優先にしてください。

Wordpressにしか使わないのであれば、Default.htmlやDefault.aspといった意味のない既定のドキュメントを消してしまっても問題ありません。

PHPの動作確認

ここまでできたら、とりあえずPHPの動作を確認しましょう。

IISのデフォルトでは、Default Web SiteのドキュメントルートはC:\inetpub\wwwrootに設定されています。

C:\inetpub\wwwroot\index.phpというファイル名で、

<?php

phpinfo();

と記述したPHPファイルをおいて、http://localhost/にブラウザでアクセスしてみてください。おなじみのPHPの動作設定画面が表示されれば成功です。

 

MySQLのインストール

MySQLとMySQL GUI Toolsのダウンロード

以下のページから、MySQL本体と管理ツールをダウンロードします。

わかりづらいですが、Windows (X86) > Pick a mirror > ≫ No thanks, just take me to the downloads!と辿ればダウンロードできます。

MySQL 5.1 Downloads

http://dev.mysql.com/downloads/mysql/5.1.html

MySQL GUI Tools Downloads

http://dev.mysql.com/downloads/gui-tools/5.0.html

そのまま実行して、インストーラーの指示に従い、次へクリックしていくだけで大丈夫ですが、MySQL本体は変なレジストリの使い方をするらしく、古い設定が残っていたりするとうまくサービスの登録ができなかったりします。

他の注意点は

  • Windowsファイアーウォールを使っている場合は、□ Add firewall exception for this port にチェック。
  • 言語は○Best Support For Multilingualismを選択
  • □Install as Windows Service付近はとりあえず全部チェック。

といったところ。インストール完了画面で、4つ全部にチェックが入らなかった場合は失敗です。根気よくトライするのもありですが、下手なハマり方をすると結構面倒なので、諦めるかWindowsの再インストールで逃げましょう。

GUI-Toolsの方は、そのまま全部インストールして大丈夫です。

Wordpress用データベースの作成

スタートメニューから、MySQL > MySQL Administratorで、MySQL管理ツールを起動します。

Server HostはLocalhost、Portは3306、Usernameはroot、Passwordは先ほどMySQLのインストーラーで入力したものを指定することで、管理画面が開きます。

こちらも3ペイン構成になっているので、カタログ > Create New Schema でDBを作成します。とりあえず単純に wp とでも名前をつけておきましょう。 

 wp05

wp用のユーザーの作成

いくらローカル環境とはいえ、root権限でwpデータベースにアクセスさせるのはアレなので、専用のユーザーを作ります。

MySQLでのユーザーの権限はちょっと癖があるので、rootユーザーをコピーして作ってしまいましょう。

左上のペインからUser Administrationを選択し、左下のペインでrootを右クリック、Clone Userをクリックします。

wp06

MySQL Userはとりあえずwp_userとし、パスワードを入力してください。

また、Schema Privileges(中央のタブ)をクリックし、Information_schemamysqltestについて、<< をクリックしてwp_userにいじらせる権限を取り外しましょう。

全部終わったら、Apply changesボタンをクリックしてください。これでデータベースwp用のユーザー、wp_userが追加できました。

 

Wordpressのデプロイ

プログラムの配置

日本語公式サイトより最新のWordpressパッケージをダウンロードしましょう。

http://ja.wordpress.org/releases/

展開し、中身をwwwrootに展開します。

場所が気にくわなければ、IISの管理コンソールで、Default Web Siteを選択し、右のペインの基本設定をクリックすれば、物理パスを変更できます。

wp-config.phpの作成

ここからは公式サイトに書かれている通りです。

プログラムが配置されたディレクトリの、wp-config-sample.phpをwp-configにリネーム、

Wordpressのデータベース名をwp、ユーザー名をwp_user、パスワードをwp_userに設定したパスワード、ホスト名はlocalhostです。

以上を行ったら、ブラウザでhttp://localhost/にアクセスしてください。これでWordpressのインストール画面が表示されるので、Blog名とメールアドレスを入力し、おしまいです。

 

URL Rewriteモジュールの設定

IISは7.0になって、やっとmod_rewiteのような機能がつきました。

(ISAPI Rewiteのような有償サードパーティーツールもありましたが、パフォーマンスや動作に難があるのであまり使われていません)

通常では、index.php/や/?というURLでアクセスできますが、 きれいなパーマリンクURLを実現するため、URL Rewriteモジュールを利用します。

インストールや、設定手順は公式の解説にあります。

パーマリンクの使い方 WordPress Codex 日本語版

URL Rewrite Moduleのダウンロードは以下から。特にインストールオプションはないので、次へ連打でインストールします。

Microsoft URL Rewrite Module for IIS 7.0 (x86)

http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1691

Microsoft URL Rewrite Module for IIS 7.0 (x64)

http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1692

なお、IIS管理コンソールからは、Default Web Siteを選択し、URL Rewriteをダブルクリック、以下のような設定で、mod_rewrite相当の動作をしてくれるはずです。

 wp07

が、ちょっと設定のUIがめんどくさいので、上記サイトのように、Wordpressのプログラムのディレクトリに作成された、Web.configを直接テキストエディタで編集した方が楽です。

<rewrite>
    <rules>
        <rule name=”Main Rule” stopProcessing=”true”>
            <match url=”.*” />
            <conditions logicalGrouping=”MatchAll”>
                <add input=”{REQUEST_FILENAME}” matchType=”IsFile” negate=”true” />
                <add input=”{REQUEST_FILENAME}” matchType=”IsDirectory” negate=”true” />
            </conditions>
            <action type=”Rewrite” url=”index.php” />
        </rule>
    </rules>
</rewrite>

<system.webServer>の下の行にコピペするだけ。

このRewrite設定で、どんなURLへのリクエストでもindex.phpへ流れるようになっているので、

/%year%/%monthnum%/%postname%/

のようなカスタム構造が利用可能です。

設定後、テストの投稿をしてサイトを開き、パーマリンクを確認しましょう。

http://localhost/2009/04/test/

のようなURLで開けていれば成功です。お疲れ様でした。