You can set a response early in a request event: public function my404Check(GetResponseEvent $event) { // only return a response for a master request if (!$event->isMasterRequest()) { return; } // Do some logic here to check if it should be a 404. $response = new Response('', Response::HTTP_NOT_FOUND); $event->setResponse($response); } The event dispatcher checks if a response is already set and returns this response without executing any more code to build a Drupal response.