【发布时间】:2020-11-01 09:46:04
【问题描述】:
我正在 laravel 中构建一个多租户系统,每个子域都保存在数据库中。当访问子域时,从数据库中检查它是否存在,如果不存在则调用 abort(403)。方法如下:
路由/web.php
Route::group(array('domain' => '{subdomain}.example.com', 'middleware' => ['Subdomain']), function () {
Route::get('/', 'IndexController@index');
}
中间件/子域.php
public function handle($request, Closure $next)
{
if(Subdomains::where('subdomain', $request->subdomain)->count()==0){
return abort(403);
}else{
return $next($request);
}
}
但是当我访问www.example.com 时,www 也被视为子域并从数据库中检查,因为它在数据库中不存在并且还调用了 abort(403)。简而言之,我的网站没有通过www.example.com URL 访问。
在这个 Laravel 多租户系统中,有什么方法可以区分 www 和其他子域,或者有什么方法可以处理这个问题?
【问题讨论】:
-
考虑在服务器级别设置 www --> no-www 重定向。
-
@ceejayoz ,是的,我已经在 .htaccess 文件中这样做了,但是当 url 是 https;// www,example.com 时,它仍然需要我进行子域检查,但是它工作得很好对于 HTTP_HOST (http;//www.example.com)
标签: php laravel web subdomain multi-tenant