Laravel4をApacheで動かそうと思ったら、トップディレクトリしか動かなかった件
Laravelでは、phpのビルトインサーバーを使って、
php artisan serve
とコンソールで打ってあげると、localhost:8000でアクセス出来るようになります。
ただ、わざわざコマンド打つのも面倒くさいし、バーチャルホストの設定をして、本番環境のように「sugi511.com」みたいにアクセス出来るようにしたいと思いました。
簡易的な設定として
/etc/apache2/extra/httpd-vhosts.conf
<VirtualHost *:80> DocumentRoot "/Library/WebServer/Documents/laravel/public" ServerName sugi511.com </VirtualHost>
/etc/hosts
127.0.0.1 sugi511.com
という感じでやればOK。
気をつける部分は、「/Library/WebServer/Documents/laravel」のLaravelが展開されてるディレクトリのトップ部分ではなく、/publicをDocumentRootにすること。
で、これでapacheを再起動すればOK!!
と、思いきや"http://sugi511.com/"にアクセスするといつものLaravelマークが出るんだけども、
app/routes.php
Route::get('/test', function() { return "test"; });
という風に設定をした「http://sugi511.com/test」にアクセスをしても、エラーの表示。
「http://sugi511.com/public/index.php/test」でアクセスをするとエラーなく、testと表示されるのでルーティング自体は問題がないので、.htaccessかapacheのvhostの設定が良くないんだろう。
ということで、以下のようにvhostsの設定を書き換えた。
/etc/apache2/extra/httpd-vhosts.conf
<VirtualHost *:80> DocumentRoot "/Library/WebServer/Documents/laravel/public" ServerName sugi511.com <Directory "/Library/WebServer/Documents/laravel/public"> AllowOverride All </Directory> </VirtualHost>
AllowOverrideは.htaccessによる設定の上書きに関するプロパティで
noneにすると.htacessが無視されるのでAllで有効にしてあげる。
これでしっかりと動くようになった₍₍⁽⁽(ી(*゚▽゚*)ʃ)₎₎⁾⁾
あんまり使うことはないかもしれないけど、
http://sugi511.com/testというルーティングを
http://sugi511.com/public/index.php/test
で確認出来るというのは、新しい発見だった。
参考:
Laravel routes not working? Make sure .htaccess is working. | Epigroove