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

この記事からわかること

  • Laravel×MAMPURLからpublicをなくす方法
  • .htaccessファイルの設置場所
  • サーバーエラーNot Found解決法
  • laravel10での方法
  • httpd.confファイルの設定見直す

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

Laravelプロジェクトを立ち上げた際にサイトを表示させるURLからpublicを削除する方法を紹介していきます。

環境

今回の目的

今回の目標は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>

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index