Laravel 特定子域的维护模式
Laravel maintenance mode on specific subdomain
我知道你可以排除主应用程序的一些 URI,比如如果你想排除 example.com/page
,你只需将它添加到 CheckForMaintenanceMode.php
,就像这样:
在app/Http/Middleware/CheckForMaintenanceMode.php
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode as Middleware;
class CheckForMaintenanceMode extends Middleware
{
/**
* The URIs that should be reachable while maintenance mode is enabled.
*
* @var array
*/
protected $except = [
'/page'
];
}
现在,我的应用程序有几个使用一个应用程序的子域;我的主要应用程序有一个子域:app.example.com
,我的 API 端点的子域:api.example.com
和主要网站:www.example.com
我怎么可能 except
维护模式的特定子域而不是 URI?就像 api.example.com
和 app.example.com
处于维护模式但不是主要网站 www.example.com
?
我正在尝试自己弄清楚它,甚至制作我自己的中间件只是为了做到这一点,但是是否可以使用 laravel 的内置维护模式和 php artisan:down
?
类似于:
// app.example.com and api.example.com is in maintenance mode except:
protected $except = [
'example.com'
'www.example.com'
];
查看 Illuminate\Foundation\Http\Middleware\CheckMaintenanceMode
中间件 class:
它使用 Illuminate\Http\Request
class 中的函数 fullUrlIs()
检查 $except
属性 的元素,它本身调用 Str::is()
助手(如果您使用 Laravel 助手函数全局变量,也称为 str_is()
函数):
protected function inExceptArray($request)
{
foreach ($this->except as $except) {
if ($except !== '/') {
$except = trim($except, '/');
}
if ($request->fullUrlIs($except) || $request->is($except)) {
return true;
}
}
return false;
}
见https://laravel.com/docs/7.x/helpers#method-str-is
然后您应该能够像这样检查 url,以将此域从维护模式中排除(即它将始终运行):
protected $except = [
'https://www.example.com/*'
];
假设您有两个域。一个是主域
另一个是子域。
- mydomain.com
- admin.mydomain.com
您有一个页面名称维护。维护页面在主域下。维护页面的URL是mydomain.com/maintenance。
在维护模式下,你将拥有mydomain.com/maintenance和admin.mydomain.com
的路由权限
现在工作流程。
转到 App\Http\Middleware 打开 PreventRequestsDuringMaintenance 中间件然后添加此代码
protected $except = [
'maintenance*',
'http://admin.*',
'https://admin.*'
];
然后去App\Exceptions打开Handler文件,在渲染函数里面添加
if (App::isDownForMaintenance()) {
return redirect('/maintenance');
}
现在运行php artisan down
我知道你可以排除主应用程序的一些 URI,比如如果你想排除 example.com/page
,你只需将它添加到 CheckForMaintenanceMode.php
,就像这样:
在app/Http/Middleware/CheckForMaintenanceMode.php
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode as Middleware;
class CheckForMaintenanceMode extends Middleware
{
/**
* The URIs that should be reachable while maintenance mode is enabled.
*
* @var array
*/
protected $except = [
'/page'
];
}
现在,我的应用程序有几个使用一个应用程序的子域;我的主要应用程序有一个子域:app.example.com
,我的 API 端点的子域:api.example.com
和主要网站:www.example.com
我怎么可能 except
维护模式的特定子域而不是 URI?就像 api.example.com
和 app.example.com
处于维护模式但不是主要网站 www.example.com
?
我正在尝试自己弄清楚它,甚至制作我自己的中间件只是为了做到这一点,但是是否可以使用 laravel 的内置维护模式和 php artisan:down
?
类似于:
// app.example.com and api.example.com is in maintenance mode except:
protected $except = [
'example.com'
'www.example.com'
];
查看 Illuminate\Foundation\Http\Middleware\CheckMaintenanceMode
中间件 class:
它使用 Illuminate\Http\Request
class 中的函数 fullUrlIs()
检查 $except
属性 的元素,它本身调用 Str::is()
助手(如果您使用 Laravel 助手函数全局变量,也称为 str_is()
函数):
protected function inExceptArray($request)
{
foreach ($this->except as $except) {
if ($except !== '/') {
$except = trim($except, '/');
}
if ($request->fullUrlIs($except) || $request->is($except)) {
return true;
}
}
return false;
}
见https://laravel.com/docs/7.x/helpers#method-str-is
然后您应该能够像这样检查 url,以将此域从维护模式中排除(即它将始终运行):
protected $except = [
'https://www.example.com/*'
];
假设您有两个域。一个是主域 另一个是子域。
- mydomain.com
- admin.mydomain.com
您有一个页面名称维护。维护页面在主域下。维护页面的URL是mydomain.com/maintenance。 在维护模式下,你将拥有mydomain.com/maintenance和admin.mydomain.com
的路由权限现在工作流程。 转到 App\Http\Middleware 打开 PreventRequestsDuringMaintenance 中间件然后添加此代码
protected $except = [
'maintenance*',
'http://admin.*',
'https://admin.*'
];
然后去App\Exceptions打开Handler文件,在渲染函数里面添加
if (App::isDownForMaintenance()) {
return redirect('/maintenance');
}
现在运行php artisan down