재료 준비
- 깨끗한 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;
Split 도메인 이름을 매개변수로
Route::domain('{account}.{webname}.{suffix}')->group(function () { Route::get('user/{id}', function ($account, $webname, $suffix, $id) { // 可以在请求中接收到被分割的参数,可能的使用场景:在单独路由中需要根据不同的域名处理不同的需求 dd($account, $webname, $suffix, $id); }); });
참고: 계정이 고정되지 않은 경우 Nginx 서버 이름을 일반으로 구성할 수 있습니다: *.example.com
*.example.com
关于多域名
配置两个不同的域名如下:
server_name *.amor_laravel_test.amor;
server_name *.amor_laravel_test_1.amor;
여러 도메인 이름 정보
구성 다음과 같은 두 개의 서로 다른 도메인 이름:
server_name *.amor_laravel_test.amor;
server_name *.amor_laravel_test_1.amor;
- Laravel을 일치시키는 방법 도메인 이름이 다른가요?
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); }); });
- 방법 추가:
protected function mapSelfRoutes() { Route::domain('{account}.amor_laravel_test_1.amor') ->middleware('web') ->namespace($this->namespace) ->group(base_path('routes/self.php')); }
Register
public function map() { $this->mapApiRoutes(); $this->mapWebRoutes(); $this->mapSelfRoutes(); // }
Route::get('/user', function ($account) { dd($account); });
참고:
필수 모든 도메인이 설정됩니다. 자체만 설정된 경우 동일한 요청 경로에서 설정되지 않은 도메인이 먼저 일치됩니다.
[추천:
- ]
여러 도메인 이름으로 라우팅할 때 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'); } });는 정확히 동일합니다. 둘 다 내장된 로그인 경로를 호출하고 컨트롤러도 동일합니다. 템플릿을 살펴보겠습니다.
<form method="POST" class="form-horizontal" action="{{ route('login') }}"> --- </form>
route() 보조 함수는 경로 이름 목록에 로드된 로그인을 읽습니다. RouteServiceProvider에 이 두 경로 파일을 동시에 로드하면
public function map() { $this->mapApiRoutes(); $this->mapWebRoutes(); $this->mapSelfRoutes(); // }
네임스페이스가 구분되지 않습니다. 또는 구별 없음 컨트롤러는 경로 보조 기능에 의해 생성된 절대 경로를 마지막 경로 도메인으로 설정합니다. 따라서 논리가 일관되고 간단한 수정을 통해 다른 도메인 이름을 통해 다른 사이트를 구별하려는 경우에는 다음을 수행해야 합니다. 판단 및 로드 온 디맨드:
public function map() { if(request()->getHost() == env('ONLINEDOWN_DOMAIN')) { $this->mapApiRoutes(); } if(request()->getHost() == env('PCSOFT_DOMAIN')) { $this->mapPcsoftRoutes(); } $this->mapWebRoutes(); // }
요약: