Laravelは、インストールしたディレクトリの中のpublicがドキュメントルートになります。
Apacheであれば、confファイルの中でDocumentRootディレクティブを使ってpublicを指定することになるかと思います。
しかし、既に別のディレクトリをDocumentRootに指定している場合はどうしたらいいのでしょう。
うちのVPSが正にその状況です。(^^;)
WordPressが動いているし、ownCloudが動いているし、他にもいろいろとユーティリティ的なものが動いているし、今更DocumentRootを変えるわけにはいきません。
LaravelのpublicディレクトリをDocumentRootの中に移動するという方法もあるらしいのですが、そうするとindex.phpの中にハードコーディングされているautoload.phpのパスがずれてしまうわけで…。
Laravelのディレクトリ構造を弄らずにどうにかできないものか。
Laravelが弄れないならApacheを弄ればいいじゃない。(^^)
例えば、「hogehoge.com」にアクセスした場合、現状ではDocumentRootで指定されたディレクトリのindex.htmlなりindex.phpなりが表示されるかと思います。
そういう環境において、
hogehoge.com/laravel
↑こんな感じでLaravelのpublicディレクトリにアクセスできるようにします。
まずはconfファイル。
/etc/httpd/conf.dディレクトリの中に分かりやすい名前でconfファイルを作ります。
(今回はlaravel.confにしてみました)
Alias /laravel "/var/www/laravel/public"
<Directory "/var/www/laravel/public">
Options +FollowSymLinks
AllowOverride All
<IfModule mod_dav.c>
Dav off
</IfModule>
</Directory>
URLのお尻とAliasの部分を同じにします。
/var/www〜の部分はLaravelのpublicディレクトリをフルパスで記述します。
Directoryディレクティブも同様に…。
次にpublicディレクトリの.htaccessです。
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /laravel/$1 [L,R=301]
RewriteBase /laravel
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
トレイリングスラッシュの処理部分のRewriteRuleとその下のRewriteBaseに、Aliasと同じものを記述します。
あとはApacheをrestartとかgracefulすれば、hogehoge.com/laravelでウェルカムページが表示されるはずです。