Ich habe hunger

あふりかエンジニア、アフリカ向けのB2BのSaaSを開発する

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と表示されるのでルーティング自体は問題がないので、.htaccessapacheの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