いつもはLinux環境ですが、今回はLaravel5.1.xをWindows Server 2012 R2(IIS8.5)環境で使う方法を調べてメモします。
また、database.configでSQL Serverへのコネクトしてみます。
##やりたいこと
- http://servername/laravelでLaravelを使えるようにする
- LaravelのDBとして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フォルダにネットユーザーの書き込み権限を付与する。
以上。
##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のユーザー名が表示されました。
以上。