6) { $domain = implode('.', array_reverse(array_slice(array_reverse($domainPart), 6))); } } if (strpos($domain, ':') !== false) { $domain = explode(':',$domain)[0]; } return $domain; } /** * @param array $config Valet configuration array * * @return string|null If set, default site path for uncaught urls * */ function valet_default_site_path($config) { if (isset($config['default']) && is_string($config['default']) && is_dir($config['default'])) { return $config['default']; } return null; } /** * Load the Valet configuration. */ $valetConfig = json_decode( file_get_contents(VALET_HOME_PATH.'/config.json'), true ); /** * Parse the URI and site / host for the incoming request. */ $uri = urldecode( explode("?", $_SERVER['REQUEST_URI'])[0] ); $siteName = basename( // Filter host to support wildcard dns feature valet_support_wildcard_dns($_SERVER['HTTP_HOST']), '.'.$valetConfig['tld'] ); if (strpos($siteName, 'www.') === 0) { $siteName = substr($siteName, 4); } /** * Determine the fully qualified path to the site. */ $valetSitePath = null; $domain = array_slice(explode('.', $siteName), -1)[0]; foreach ($valetConfig['paths'] as $path) { if (is_dir($path.'/'.$siteName)) { $valetSitePath = $path.'/'.$siteName; break; } if (is_dir($path.'/'.$domain)) { $valetSitePath = $path.'/'.$domain; break; } } if (is_null($valetSitePath) && is_null($valetSitePath = valet_default_site_path($valetConfig))) { show_valet_404(); } $valetSitePath = realpath($valetSitePath); /** * Find the appropriate Valet driver for the request. */ $valetDriver = null; require __DIR__.'/cli/drivers/require.php'; $valetDriver = ValetDriver::assign($valetSitePath, $siteName, $uri); if (! $valetDriver) { show_valet_404(); } /** * ngrok uses the X-Original-Host to store the forwarded hostname. */ if (isset($_SERVER['HTTP_X_ORIGINAL_HOST']) && !isset($_SERVER['HTTP_X_FORWARDED_HOST'])) { $_SERVER['HTTP_X_FORWARDED_HOST'] = $_SERVER['HTTP_X_ORIGINAL_HOST']; } /** * Attempt to load server environment variables. */ $valetDriver->loadServerEnvironmentVariables( $valetSitePath, $siteName ); /** * Allow driver to mutate incoming URL. */ $uri = $valetDriver->mutateUri($uri); /** * Determine if the incoming request is for a static file. */ $isPhpFile = pathinfo($uri, PATHINFO_EXTENSION) === 'php'; if ($uri !== '/' && ! $isPhpFile && $staticFilePath = $valetDriver->isStaticFile($valetSitePath, $siteName, $uri)) { return $valetDriver->serveStaticFile($staticFilePath, $valetSitePath, $siteName, $uri); } /** * Attempt to dispatch to a front controller. */ $frontControllerPath = $valetDriver->frontControllerPath( $valetSitePath, $siteName, $uri ); if (! $frontControllerPath) { show_valet_404(); } chdir(dirname($frontControllerPath)); require $frontControllerPath;