LoginSignup
14
28

More than 5 years have passed since last update.

.htaccessでLaravelとhtmlファイルを共存させ、簡単に部分システム化する方法

Last updated at Posted at 2016-10-14

静的HPに一部システム導入する案件でLaravelを利用したのですが、
Laravelと静的ファイルの共存について簡潔な記事がなかったので纏めておきます。

index.phpをいじったりしなくても
.htaccessを少し修正すれば簡単に部分システム化できますよ!

例)
■ドメイン
http://example.com/

■サーバーのフォルダ構成(直下)

・index.html
・laravelフォルダ

スクリーンショット 2016-10-14 15.06.35.png

■状況

http://example.com/」にアクセスするとindex.htmlが表示されるサイトに、
「laravel」というLaravelプロジェクトフォルダをアップした状態です。

追加するシステム部分のURLは、「/test」を追加した「http://example.com/test
にしたいです。
スクリーンショット 2016-10-14 15.51.54.png

 ちなみに、この状態で「http://example.com/test」を叩いても、当然エラーです。

■解決策
以下のような.htaccessをドメイン直下に配置します。
htaccess.png

↓コピペ用

<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ファイルを共存させ、簡単に部分システム化する方法」でした。

14
28
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
28