静的HPに一部システム導入する案件でLaravelを利用したのですが、
Laravelと静的ファイルの共存について簡潔な記事がなかったので纏めておきます。
index.phpをいじったりしなくても
.htaccessを少し修正すれば簡単に部分システム化できますよ!
例)
■ドメイン
http://example.com/
■サーバーのフォルダ構成(直下)
・index.html
・laravelフォルダ
■状況
「http://example.com/
」にアクセスするとindex.htmlが表示されるサイトに、
「laravel」というLaravelプロジェクトフォルダをアップした状態です。
追加するシステム部分のURLは、「/test」を追加した「http://example.com/test
」
にしたいです。
ちなみに、この状態で「http://example.com/test
」を叩いても、当然エラーです。
■解決策
以下のような.htaccessをドメイン直下に配置します。
↓コピペ用
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ /laravel/public/index.php [L]
</IfModule>
RewriteRuleに 「 ^/プロジェクト名/public/index.php [L]」を記載してください。
(index.phpにパスを通す意味や、.htaccessの記述説明はここでは割愛します。わからない方は後ほどググってみてください。)
これで「http://example.com/test
」を叩くとLaravelで処理され、
「http://example.com/
」の時はそのままindex.htmlが表示されます。
あとはLaravel側の処理を書き足していけば、静的HPの部分システム化完了です!
ちなみに、Laravelの階層が変わったことにより、asset()が通常通り効きません。
asset()を使うとドメイン直下を見に行ってしまうので、以下のような方法で解決できます。
①public配下に置いていたCSSやJSをフォルダごと「http://example.com/
」直下に移動する
②ファイルのパスの前に「/laravel/public/
」を追加し指定する。
例)src="/css/example.css"
→ src="/laravel/public/css/example.css"
③vendorの中を改修しに行く。
個人的には②の方法で解決が一番手っ取り早く、かつ混乱も少ないかと思います。
以上、「.htaccessでLaravelとhtmlファイルを共存させ、簡単に部分システム化する方法」でした。