【Laravel/MAMP】URLのpublicをなくしてアクセスできるようにする方法!

この記事からわかること
- Laravel×MAMPでURLからpublicをなくす方法
- .htaccessファイルの設置場所
- サーバーエラーやNot Foundの解決法
- laravel10での方法
- httpd.confファイルの設定を見直す
index
[open]
\ アプリをリリースしました /
Laravelプロジェクトを立ち上げた際にサイトを表示させるURLからpublic
を削除する方法を紹介していきます。
環境
- Laravel:8.83.27
- Laravel Installer:4.2.9
- PHP(MAMP): 8.2.0
- PHP(cli): 8.2.8
- Composer:2.5.8
今回の目的
今回の目標はLaravelプロジェクトにMAMPを使用してアクセスするURLを以下のように正規化することです。
http://localhost/project/public
↓
http://localhost/project/
または
http://localhost/public
↓
http://localhost/
正規化してLaravelトップページが表示されるようにしていきます。
LaravelプロジェクトURLからpublicを無くす方法
URLからpublicを無くす方法は複数存在します。
publicフォルダごとルート直下に移動する
.htaccessをルート直下に設置する
今回は.htaccess
をルート直下(Laravelプロジェクト/
)に設置していきます。Laravelプロジェクト直下にはデフォルトで存在しないのでエディタなどで作成し中に以下の内容を記述して設置してください。
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
public
フォルダの中にはもともと用意されていますが、こちらは何も変更しなくても大丈夫です。これでpublic
を抜いたURLでもアクセスできるようになっているはずです。
うまくアクセスできない場合の解消法
それでもサーバーエラー(500)やNot Found(404)になってしまう場合はLaravelのバージョンや環境に問題がある可能性があります。私はLaravel8で動作確認が取れましたがLaravel10では.htaccess
を設置してもアクセスできませんでした。
また以前は以下の内容の.htaccess
を設置していましたがLaravel9よりserver.php
がなくなったらしく、うまく動作しなくなっていました。
<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>
httpd.confの設定を見直す
それでもアクセスできない場合はMAMP内の設置で.htaccess
が反映されない設定になっている可能性があります。設定を変更するには/Applications/MAMP/conf/apache/
にあるhttpd.conf
の中のAllowOverride All
になっているか確認してください。もしAllowOverride None
になっていたら反映されないようになっている可能性があるので書き換えてください。
<Directory "/Applications/MAMP/htdocs">
Options All
AllowOverride All ⇦ AllowOverride NoneならAllowOverride Allにする
Require all granted
XSendFilePath "/Applications/MAMP/htdocs"
</Directory>
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。
個人開発に限界を感じたらiOSに特化したプログラミングスクール「iOSアカデミア」も検討してみてください!無料相談可能で「最短・最速」でiOSエンジニアになれるように手助けしてくれます。