Edited at

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

More than 3 years have 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のユーザー名が表示されました。

以上。