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でウェルカムページが表示されるはずです。