ドキュメントルートを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サイト作ってみたいけど、ドキュメントルートを変更するためにわざわざ違うサーバを契約するのはちょっと・・・」
という人向けです
企業や個人情報を扱うちゃんとしたウェブサイトでやるにはリスクが大きいので、ご注意を
ディスカッション
コメント一覧
まだ、コメントがありません
新たにPostされたDocs
: ツール関連
キーボードを銀軸から赤軸に買い替えた話
約3年半前、仕事で使うキーボードとしてARCHISS ProgresTouchの ...: スマホ
楽天モバイルがおすすめできない人の特徴とは?
楽天モバイルの最強プランをおすすめできない人の特徴を簡単にまとめてみました また ...: システム開発
なぜスクラムがつらいのか?開発現場が疲弊するのか?スクラムに対する違和感と共に原因を考えてみた
今ではどこの開発現場に行っても、やれスクラムスクラムと、まるでスクラムでもやって ...: Laravel
1つのテーブルを複数のテーブルと結合したい【Laravel10】
1つのテーブルを2つの異なるテーブルに対して結合したいケースがあったのでLara ...: Laravel
Laravelで複数画像アップロード時のvalidateを指定【Laravel10】
jQuery - Image Uploaderを使って、フォームから複数の画像を ...HashMap
created_by
はやぴ
Web/アプリ開発エンジニア
Sierにてお堅いB向けのソフトウェア開発を経て、現在はC向けのWebやアプリを中心に開発しています。
Utilities