Laravel provides powerful methods for accessing and manipulating request host information, enabling precise control over URL handling and domain-specific logic. These methods - host(), httpHost(), and schemeAndHttpHost() - each serve distinct purposes in URL manipulation and domain handling.
This functionality is particularly crucial when building multi-tenant applications, handling cross-domain requests, or managing applications that need to generate domain-specific URLs dynamically.
// Basic host information retrieval$host = $request->host(); // Returns domain name$httpHost = $request->httpHost(); // Includes port if non-standard$fullUrl = $request->schemeAndHttpHost(); // Full scheme and host
Here's an example of a multi-environment URL generator:
// app/Services/DomainRouter.php<?php namespace App\Services; use Illuminate\Http\Request; class DomainRouter{ public function __construct(private Request $request) { } public function generateRoutes(): array { $baseHost = $this->request->host(); $scheme = $this->request->schemeAndHttpHost(); return match($this->getEnvironment($baseHost)) { 'production' => [ 'api' => "{$scheme}/api/v1", 'web' => $this->request->httpHost(), 'assets' => str_replace('api', 'cdn', $scheme), 'environment' => 'production' ], 'staging' => [ 'api' => "{$scheme}/api/v1", 'web' => str_replace('api', 'staging', $this->request->httpHost()), 'assets' => str_replace('api', 'staging-cdn', $scheme), 'environment' => 'staging' ], default => [ 'api' => 'http://localhost:8000/api/v1', 'web' => 'http://localhost:3000', 'assets' => 'http://localhost:9000', 'environment' => 'local' ] ]; } private function getEnvironment(string $host): string { if (str_contains($host, 'prod')) { return 'production'; } if (str_contains($host, 'staging')) { return 'staging'; } return 'local'; }}
Example usage:
// On production (api.example.com){ "api": "https://api.example.com/api/v1", "web": "api.example.com", "assets": "https://cdn.example.com", "environment": "production"}// On staging (api.staging.example.com){ "api": "https://api.staging.example.com/api/v1", "web": "staging.example.com", "assets": "https://staging-cdn.example.com", "environment": "staging"}
Laravel's host methods provide flexible ways to handle domain-specific logic and URL generation across different environments.
