ドキュメントルートをpublicにしないで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サイト作ってみたいけど、ドキュメントルートを変更するためにわざわざ違うサーバを契約するのはちょっと・・・」
という人向けです
企業や個人情報を扱うちゃんとしたウェブサイトでやるにはリスクが大きいので、ご注意を
ディスカッション
コメント一覧
まだ、コメントがありません
みんながLoadingしてる記事
新たにPostされた記事
: JS
Dropzone.jsで編集画面を作る(アップロード済みの画像を表示)
前回からの続きです Dropzone.jsを使って画像アップロードの編集画面を作 ...: Laravel
LaravelでDBテーブルをupdateした時に、同時に更新した値を取得する裏技[Laravel8]
通常Eloquentのsaveやupdateでは、実行時に更新した値の結果を返し ...: JS
忘れがちなJqueryのあれやこれ
Jqueryって何でこんなに忘れやすいのでしょうか 呪文にかかったくらい覚えられ ...: 資格
理系エンジニアの僕がTOEICで800点をとるためにした勉強
先日、TOEIC L&R テストで800点を超えました 今回は理系エンジ ...: Laravel
[Laravel8]npm run devが失敗する場合の解決法
Laravel8にJetstreamをインストールする際、npm run dev ...HashMap
Created by
はやぴ
Web/アプリ開発エンジニア
Sierにてお堅いB向けのソフトウェア開発を経て、現在はC向けのWebやアプリを中心に開発しています。
そのほか