Laravel 9 如何配置命名路由使用不带端口的自定义域名
解决Laravel 9命名路由生成错误链接的问题
针对你用php artisan serve --host="mywebsite.com" --port=3000启动服务时,命名路由生成http://localhost:3000或带端口无HTTPS链接的问题,按以下步骤配置:
1. 修正.env配置并清除缓存
确保.env文件中APP_URL设置为带HTTPS的域名,无端口:
APP_URL=https://mywebsite.com
执行命令清除配置和路由缓存:
php artisan config:clear php artisan route:clear
2. 配置信任代理(关键步骤)
因为你通过IIS反向代理访问后端的3000端口,Laravel默认会读取后端服务器的请求信息,需要让它识别IIS转发的真实域名和协议。修改app/Http/Middleware/TrustProxies.php:
<?php namespace App\Http\Middleware; use Illuminate\Http\Middleware\TrustProxies as Middleware; use Illuminate\Http\Request; class TrustProxies extends Middleware { // 信任所有代理(生产环境建议指定IIS的具体IP) protected $proxies = '*'; // 启用所有转发头的检测 protected $headers = Request::HEADER_X_FORWARDED_ALL; }
3. 配置IIS反向代理的转发头
在IIS的URL重写规则中,添加以下服务器变量,确保转发真实的协议和主机名:
- 新增服务器变量
HTTP_X_FORWARDED_PROTO,值设为https - 新增服务器变量
HTTP_X_FORWARDED_HOST,值设为mywebsite.com
4. 强制URL生成规则(可选兜底方案)
如果上述配置仍有问题,可在bootstrap/app.php中强制URL生成使用指定的根地址和协议:
$app->afterBootstrapping(\Illuminate\Foundation\Bootstrap\LoadConfiguration::class, function ($app) { $app['url']->forceRootUrl(config('app.url')); $app['url']->forceScheme('https'); });
完成以上配置后,命名路由生成的链接就会是https://mywebsite.com/xxx格式,不带端口且使用HTTPS。
内容的提问来源于stack exchange,提问作者Charas
相关产品推荐
相关产品推荐

