laravel
IIS

Laravel5.1.xをIIS8.5で使う

More than 1 year has passed since last update.

いつもはLinux環境ですが、今回はLaravel5.1.xをWindows Server 2012 R2(IIS8.5)環境で使う方法を調べてメモします。
また、database.configでSQL Serverへのコネクトしてみます。

やりたいこと

前提知識

いくつか注意点がある。

  • IISでは.htaccessでrewriteできないので、Web.configを使う。
  • rewirteにはIISのrewriteモジュール(URL書き換えモジュール)が必要
  • なるべくドキュメントルート(もしくは仮想ディレクトリ)を設定した方が良い。

私は、ドキュメントルートは既に別のアプリが使っているので、仮想ディレクトリを設定することにする。

前提環境

  • Windows Server 2012 R2インストール済
  • IIS8.5インストール済
  • rewriteモジュールインストール済
  • PHP等インストール済
  • SQL ServerおよびPHPドライバインストール済
  • composerインストール済
  • ドキュメントルート(C:¥inetpub¥wwwroot)にlaravelインストール済

また、普通にPHPをインストールしてPDO使うまではこちらを参考にしてください。

IISの設定

仮想ディレクトリの設定

今回は、http://localhost/laravel/でLaravelにアクセスできるようにしてみる。
やり方は、普通の仮想ディレクトリの設定。

laravelをc:¥inetpub¥wwwroot¥laravel¥publicにマップする

Web.configの設置

publicフォルダに下記情報を記したWeb.configを設置

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
        <handlers accessPolicy="Read, Execute, Script">
        </handlers>
        <rewrite>
            <rules>
                <rule name="Rules for laravel" stopProcessing="true">
                    <match url="^(.*)$" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />                     
                    </conditions>
                    <action type="Rewrite" url="index.php/{R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

自分の環境に合わせて、

<action type="Rewrite" url="index.php/{R:1}" />

部分を編集する。

なお、そもそもURL Rewriteモジュールがインストールされていないと上記web.configはエラーになります。

storageフォルダに書込権限付与

laravel/storagesフォルダにネットユーザーの書き込み権限を付与する。

以上。

http://localhost/laravelにアクセスしてLaravelと表示されればOK。

SQL Serverを使う

ここでは、SQL Server 2014を利用したが、2012とかでも同じだと思う。
config/database.phpにSQL Server用の記述があるので、何も難しいことはない。

.envの設定

通常と同じように.envを設定する。

config/database.phpを編集する

標準ではMySQLを使われるようになっているので、それをSQL Serverに変更する。

 'default' => env('DB_CONNECTION', 'sqlsrv'),

の行をmysqlからsqlsrvに変更する。

Route::get('hoge',function(){

    $user = DB::table('users')->find(1);
    return $user->name;

});

などとしてテストしてみる。usersテーブルにnameカラムがあることが前提。/hogeにアクセスすると、id1のユーザー名が表示されました。

以上。