前提
本記事は以下が関係します。
用語等わからない場合ご確認いただけると良いと思います。
現象
Laravel Debugbarを導入する際、ルートプレフィックスを設定している場合、それをDebugbarに明示しないとDebugbar表示時に_debugbar/assets/javascript
へのアクセスで404エラーを返すはずです。

原因
この現象の原因は、Laravel Debugbarのアセット(JavaScriptやCSSなど)へのURL生成方法と、アプリケーションのルートプレフィックス設定の関係にあります。
-
Debugbarのアセットルートはグローバルで定義されている
- DebugbarのServiceProviderでは、アセットへのルート(例:
_debugbar/assets/javascript
)を**グローバル(prefixなし)**で登録しています。 - そのため、
Route::group(['prefix' => '/your_prefix'], ... )
でアプリのルートにプレフィックスが付いていても、Debugbar自身のルートには自動的にプレフィックスは付与されません。
- DebugbarのServiceProviderでは、アセットへのルート(例:
-
Debugbarのリンク生成もprefixなしで行われる
- DebugbarがHTML内に出力するリンクも、
/_debugbar/assets/javascript?...
のようにprefixなしで生成されます。
- DebugbarがHTML内に出力するリンクも、
-
ルーティングとURLの不一致
- アプリの全体にprefixがある場合、
/your_prefix/_debugbar/assets/javascript?...
でアクセスする必要がありますが、Debugbarは/_debugbar/assets/javascript?...
でリンクを作り、404になります。これは単にlaravelのルーティングエラーです。Webサーバーのファイルにアクセスできないエラーではありません。
- アプリの全体にprefixがある場合、
解決方法
この問題を解決するには、config/debugbar.php
のroute_prefix
設定を変更する必要があります。
Debugbarにルートプレフィックスの存在を教えてあげるということですね。
-
Debugbarの設定ファイルを公開
php artisan vendor:publish --provider="Barryvdh\Debugbar\ServiceProvider"
-
生成された
config/debugbar.php
の、route_prefix
の設定を探します。'route_prefix' => '_debugbar',
-
アプリケーションのプレフィックスを追加
'route_prefix' => 'your_prefix/_debugbar',
// 動的にする場合はこんな風にできます。 $key = explode('/', request()->path())[0]; return [ // 他の設定は省略 'route_prefix' => $key . '/_debugbar', ];
この設定により、DebugbarのアセットURLがアプリケーションのプレフィックスを考慮して生成されるようになります。
まとめ
- 原因はDebugbarのルート登録・リンク生成にアプリのprefixが考慮されていないこと
- WebサーバーではなくLaravelアプリ側のルーティングとURL生成の問題
- 解決策は
config/debugbar.php
のroute_prefix
設定を変更すること