publicディレクトリをAliasで指定

  • 2016年3月14日
  • Linux
  • 0件

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

Linuxの最新記事8件