IISでCakePHPを動かす


IIS で CakePHP や Ruby on Rails を動作させるためには URL 書き換え 機能の設定が必要となります。

ここでは CakePHP を動作させるまでの手順とURL 書き換え 用の設定ファイル(web.config)を紹介します。

  1. CakePHPをサイトからダウンロードします。
    http://cakephp.org/

    cakephp.org

    cakephp.org

  2. IIS マネージャで Webサイトを追加します。
    ダウンロードしたファイルを F:\inetpub\wwwroot 以下に展開します。
    物理バスの指定は “F:\inetpub\wwwroot\cake_1.2.5\app\webroot” となります。
    今回は Port 86 を指定しましたが、ホスト名を指定することで Port 80 を複数の Webサイトとして利用することもできます。

    Webサイトの追加

    Webサイトの追加

  3. 設定
    • F:\inetpub\wwwroot\cake_1.2.5\app\config\core.php の salt の値をデフォルト値から変更します。

      Configure::write(‘Security.salt’, ‘XXXXXXXX’);

    • F:\inetpub\wwwroot\cake_1.2.5\app\tmp フォルダ以下への書き込み権限を付与します。(IUSERフルコントロールを許可)

      (IUSERにフルコントロールを許可)

      (IUSERにフルコントロールを許可)

    • この権限がない場合、以下のようなエラーとなります。
      http://localhost:86/index.php

      Warning Permission denied

      Warning Permission denied

  4. CakePHPブログチュートリアルに従い、サンプルアプリケーションを作成します。
    • 参考 http://book.cakephp.org/ja/view/219/Blog
      今回動作確認用に作成したファイルは以下となります。
      /app/config/database.php
      /apps/controllers/posts_controller.php
      /app/model/post.php
      /app/views/posts/index.ctp
  5. URL 書き換えの設定
    以下のファイルを ”F:\inetpub\wwwroot\cake_1.2.5\app\webroot\web.config” に作成します。

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
    
            <rewrite>
                <rules>
                    <clear />
                    <rule name="Imported Rule 5" stopProcessing="true">
                        <match url="^(.*)$" ignoreCase="false" />
                        <conditions logicalGrouping="MatchAll">
                            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" pattern="" ignoreCase="false" />
                            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" pattern="" ignoreCase="false" />
                        </conditions>
                        <action type="Rewrite" url="index.php?url={R:1}" appendQueryString="true" />
                    </rule>
                    <rule name="Imported Rule 3" stopProcessing="true">
                        <match url="^$" ignoreCase="false" />
                        <conditions logicalGrouping="MatchAll" />
                        <action type="Rewrite" url="/" />
                    </rule>
                    <rule name="Imported Rule 4" stopProcessing="true">
                        <match url="(.*)" ignoreCase="false" />
                        <conditions logicalGrouping="MatchAll" />
                        <action type="Rewrite" url="/{R:1}" />
                    </rule>
                    <rule name="Imported Rule 1-1" stopProcessing="true">
                        <match url="^(.*)$" ignoreCase="false" />
                        <conditions logicalGrouping="MatchAll">
                            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" pattern="" ignoreCase="false" />
                            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" pattern="" ignoreCase="false" />
                        </conditions>
                        <action type="Rewrite" url="index.php?url={R:1}" appendQueryString="true" />
                    </rule>
                </rules>
            </rewrite>
    
        </system.webServer>
    </configuration>

    上記のファイルの設定によりIISマネージャの画面では以下のような表示となります。

    URL書き換え

    URL書き換え

  6. サンプルアプリケーションの動作確認
    サンプルアプリケーション

    サンプルアプリケーション

    URL書き換えが正し設定されていない場合、以下のようなエラーとなります。

    HTTP エラー 404.0 – Not Found

以上


タグ: ,


コメントをどうぞ