ドキュメントルートをpublicにしないでLaravelを動かす方法

Laravel

通常、多くのWebフレームワークではpublicディレクトリをドキュメントルートにすることが求められます

Laravelも同様で、publicフォルダをドキュメントルートにする必要があります

ただし、多くのレンタルサーバの場合、簡単にドキュメントルートを変更できないので他の方法を考える必要があります

publicをつけないとアクセスできない

改めて問題点を整理します

|- html (サーバの公開フォルダ)
 |- bootstrap
 |- config
 |- database
 |- public ← ドキュメントルートにしたい
 |- resources
 |- routes
 |- storage
 |- tests
 |- .htaccess

htmlはレンタルサーバが指定する公開フォルダ

このように公開フォルダに全てのLaravelファイルをアップロードしてしまうと、ウェブのトップページにアクセスするには

「https://hoge.com/public

とアクセスしなくちゃいけないんです

今回紹介するのはドキュメントルートやファイル構成を変更することなく、これを、

「https://hoge.com」

というURLでアクセスできるようにする方法です

解決方法

|- html (サーバの公開フォルダ)
 |- bootstrap
 |- config
 |- database
 |- public
  |- .htaccess ← これじゃない
 |- resources
 |- routes
 |- storage
 |- tests
 |- .htaccess ← これ

ルートディレクトリに.htaccessという名前のファイルを作って、以下のコードをコピペします

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>
    
    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ ^$1 [N]
    
    RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
    RewriteRule ^(.*)$ public/$1 
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ server.php
    
</IfModule>

publicディレクトリ配下にもデフォルトで.htaccessファイルが用意されてますが、これは編集しません

問題点

通常、レンタルサーバにファイルをアップロードすると、図のhtmlディレクトリ配下に設置されその中にあるファイルは全て公開フォルダ内にあります

普通なら実行ファイル(PHP)にはアクセスできないので問題ないはずですが、たぶん公開フォルダにあると外部から何らかの攻撃が可能になるのでしょう

僕はクラッカーじゃないので具体的な手法は知りませんが。

というわけで、この方法はあくまで個人的な趣味のウェブサイト程度ならいいかな、という手法です

「Laravelで試しにWebサイト作ってみたいけど、ドキュメントルートを変更するためにわざわざ違うサーバを契約するのはちょっと・・・」

という人向けです

企業や個人情報を扱うちゃんとしたウェブサイトでやるにはリスクが大きいので、ご注意を

エンジニアの年収を上げる方法

フリーランスエンジニアで年収を大幅アップしませんか?
実際に僕は会社員からフリーランスエンジニアになって年収が87万円アップしました

今なら相談(ヒアリング)するだけで3,000円分のamazonギフト券がもらえます!
初めての案件契約で最大10万円分の準備金がもらえます
非公開の高単価案件(100万円超え)が多数あります

詳しくはこちら