FrankenPHP环境下使用mcamara/laravel-localization实现Laravel本地化时国际化路由失效问题
FrankenPHP环境下使用mcamara/laravel-localization实现Laravel本地化时国际化路由失效问题
Hey there! 我看到你在FrankenPHP上跑Laravel国际化路由时遇到了404,换到Apache就正常,这大概率是FrankenPHP的常驻Worker进程缓存了旧的路由/配置导致的,我给你梳理几个实用的排查和解决方向:
彻底清缓存+重启FrankenWorker
FrankenPHP的Worker是常驻内存的,有时候你清了Laravel的缓存,但Worker进程里的旧数据还没更新。试试这套组合拳:- 先清空Laravel所有缓存:
php artisan cache:clear、php artisan route:clear、php artisan config:clear、php artisan view:clear - 然后重启FrankenPHP的Worker进程——如果你用的是Caddy部署,直接重启Caddy服务就行;如果是容器化部署,重启容器最直接;要是用了Laravel Octane搭配FrankenPHP,记得用
php artisan octane:reload来重载Worker。
- 先清空Laravel所有缓存:
检查FrankenPHP的Caddy配置
确认你的Caddyfile里有没有正确把所有请求转发到Laravel的入口文件。正确的FrankenPHP配置应该是这样的:your-domain.com root * public frankenphp encode gzip要是你加了额外的路由规则,比如自定义的rewrite,可能会把带语言前缀的请求拦截了,确保没有多余的规则影响国际化路由的转发。
别在Worker启动时预缓存路由
如果你用了php artisan optimize或者在启动脚本里缓存了路由,那Worker启动后就会一直用旧的路由缓存,哪怕你更新了路由文件。建议在开发阶段关闭路由缓存,生产环境每次修改路由或本地化配置后,一定要重启Worker来加载新的路由。简单路由测试定位问题
先写个极简的测试路由排除业务路由的问题:Route::group(['prefix' => LaravelLocalization::setLocale()], function () { Route::get('/test-local', function () { return "当前语言:" . app()->getLocale(); }); });然后访问
/en/test-local或者你配置的其他语言前缀路径,如果还是404,那基本可以确定是FrankenPHP的路由转发问题;如果能正常访问,那就是你原来的业务路由或者本地化配置有细节没处理好。确认本地化包的配置正确性
虽然在Apache上正常,但还是快速核对下:config/localization.php里的supportedLocales是否包含了你用的语言前缀- 所有国际化路由是否都包裹在
LaravelLocalization::setLocale()的路由组里 - 可以在路由文件里临时打印
LaravelLocalization::getSupportedLocales(),看看在FrankenPHP环境下能不能正确加载配置
内容来源于stack exchange
相关产品推荐
相关产品推荐

