详解Laravel路由之domain解决多域名问题
发布时间 - 2021-03-30 00:00:00 点击率:次下面由laravel教程栏目给大家介绍laravel 路由研究之domain 解决多域名问题,希望对需要的朋友有所帮助!
Laravel 路由研究之domain 解决多域名问题
材料准备
- 一份干净的laravel
-
两份Nginx配置文件,主要配置如下:
server_name *.amor_laravel_test_1.amor; root /var/www/amor_laravel_test/public; index index.php index.html index.htm;
server_name *.amor_laravel_test.amor; root /var/www/amor_laravel_test/public; index index.php index.html index.htm;
将域名分割为参数
Route::domain('{account}.{webname}.{suffix}')->group(function () {
Route::get('user/{id}', function ($account, $webname, $suffix, $id) {
// 可以在请求中接收到被分割的参数,可能的使用场景:在单独路由中需要根据不同的域名处理不同的需求
dd($account, $webname, $suffix, $id);
});
});注意: 若account不固定,可以将Nginx Server Name 配置为泛型: *.example.com
关于多域名
配置两个不同的域名如下:
server_name *.amor_laravel_test.amor;server_name *.amor_laravel_test_1.amor;
如何让Laravel匹配不同的域名?
方式1:直接在 route/web.php中使用domain区分
Route::domain('{account}.amor_laravel_test.amor')->group(function () {
Route::get('user/{id}', function ($account, $id) {
//
dd($account, $id);
});
});
Route::domain('{account}.amor_laravel_test_1.amor')->group(function () {
Route::get('user/{id}', function ($account, $id) {
//
dd(111, $account, $id);
});
});方式2:通过设置 RouteServiceProvider 区分
- 添加方法:
protected function mapSelfRoutes()
{
Route::domain('{account}.amor_laravel_test_1.amor')
->middleware('web')
->namespace($this->namespace)
->group(base_path('routes/self.php'));
}- 注册
public function map()
{
$this->mapApiRoutes();
$this->mapWebRoutes();
$this->mapSelfRoutes();
//
}- 添加路由文件
Route::get('/user', function ($account) {
dd($account);
});注意: 必须全部设置domain,如果只设置了self 那么在相同请求路径下,未设置domain的将会首先匹配到。
【推荐:最新的五个Laravel视频教程】
关于路由中的Action在多域名下的说明
首先,我们需要知道Action决定了路由会绑定到哪个控制器,还有一点需要注意,路由中的Action属性,决定了辅助函数 route() 生成的url。
假如,我们的路由配置如下:
-
第一个路由
Route::get('/', function () { if(\Illuminate\Support\Facades\Auth::check()) { return redirect('index'); } else { return redirect('login'); } }); -
第二个路由
Route::get('/', function () { if(\Illuminate\Support\Facades\Auth::check()) { return redirect('index'); } else { return redirect('login'); } });
一模一样,都是调用内置的login路由,控制器也一样,我们再看模板中的form表单
route() 辅助函数,会去读取路由 namelist 中加载的 login,如果我们在 RouteServiceProvider 中将这两个路由文件同时加载进来,
public function map()
{
$this->mapApiRoutes();
$this->mapWebRoutes();
$this->mapSelfRoutes();
//
}那么:不区分namespace或者不区分控制器都会导致 route 辅助函数生成的绝对路径是最后一个路由domain,因此如果我们的逻辑一致,只是想通过简单的修改,通过不同的域名区别不同的站点,我们需要做判断,按需加载:
public function map()
{
if(request()->getHost() == env('ONLINEDOWN_DOMAIN')) {
$this->mapApiRoutes();
}
if(request()->getHost() == env('PCSOFT_D
OMAIN')) {
$this->mapPcsoftRoutes();
}
$this->mapWebRoutes();
//
}总结:
1.推荐第二种方式来区分域名,优点在于路由分离 ,结构清晰,
2.domain不仅仅可以作为区分子域名来使用,也可以做参数分割,不同域名区分等
3.注意Laravel的路由匹配顺序,希望大家能认真的做一遍,体验一下,做到心中有数
4.既然已经区分开域名,那么就可以绑定到不同的控制器,或者绑定不同的模型,大家灵活应用
# php
# laravel
# nginx
# 绑定
# 加载
# 都是
# 决定了
# 第一个
# 将会
# 一遍
# 心中有数
# 这两个
# 第二个
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
大连 网站制作,大连天途有线官网?
黑客如何通过漏洞一步步攻陷网站服务器?
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
php结合redis实现高并发下的抢购、秒杀功能的实例
Android自定义listview布局实现上拉加载下拉刷新功能
如何实现建站之星域名转发设置?
Laravel如何实现一对一模型关联?(Eloquent示例)
猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】
如何在万网自助建站平台快速创建网站?
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
深圳网站制作平台,深圳市做网站好的公司有哪些?
JavaScript数据类型有哪些_如何准确判断一个变量的类型
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用
独立制作一个网站多少钱,建立网站需要花多少钱?
利用vue写todolist单页应用
Python结构化数据采集_字段抽取解析【教程】
浅谈Javascript中的Label语句
Python函数文档自动校验_规范解析【教程】
浅谈javascript alert和confirm的美化
怎么用AI帮你为初创公司进行市场定位分析?
Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用
微信h5制作网站有哪些,免费微信H5页面制作工具?
如何在 React 中条件性地遍历数组并渲染元素
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
用yum安装MySQLdb模块的步骤方法
微信小程序 HTTPS报错整理常见问题及解决方案
如何快速搭建高效WAP手机网站?
如何基于PHP生成高效IDC网络公司建站源码?
Laravel如何与Pusher实现实时通信?(WebSocket示例)
中山网站制作网页,中山新生登记系统登记流程?
高端建站如何打造兼具美学与转化的品牌官网?
Laravel如何创建自定义Facades?(详细步骤)
Laravel怎么使用Intervention Image库处理图片上传和缩放
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项
如何快速生成ASP一键建站模板并优化安全性?
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例
laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
Laravel如何生成API文档?(Swagger/OpenAPI教程)
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
如何用狗爹虚拟主机快速搭建网站?
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
Laravel怎么判断请求类型_Laravel Request isMethod用法
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?


OMAIN')) {
$this->mapPcsoftRoutes();
}
$this->mapWebRoutes();
//
}