Intereting Posts
WordPress: получить информацию об авторе из сообщения id PHP JSON Array – группа с одинаковым значением Перенаправление с использованием PHP, а не перенаправление в Cpanel SQL не создает ничего в базе данных PHP ODBC не может печатать китайский для MS Access, но COM может Не проверять, не сделан ли пользователь PHP: добавьте несколько значений флажков в один столбец MySQL Как сделать индикатор выполнения с jQuery и PHP во время ожидания процесса сервера? Как переименовать пакет в symfony? Многомерный массив для объекта, особым образом Как загрузить большой файл с использованием PHP (использование низкой памяти) preg_repalce соответствует частичным данным с правильным регулярным выражением Как создать вложенный список из массива PHP для выпадающего списка? данные одной формы, различные действия по двум отдельным кнопкам отправки PHP / MySQL Сортировать по столбцу в другой таблице

Как перенаправить все ошибки 404 на общий маршрут?

Я использую механизм 404 symfony2, который в основном работает нормально.

Вот сценарий. Скажите, что вы заходите на сайт www.site.tld / whatever – где / чего не существует. После того, как вы перейдете на страницу, URL останется www.site.tld / whatever – но 404 страница возвращается фреймворком.

Как я могу заставить КАЖДЫЙ 404 к общему маршруту, например, www.site.tld / not-found, чтобы исходный запрошенный маршрут НЕ оставался в URL-адресе BAR?

Solutions Collecting From Web of "Как перенаправить все ошибки 404 на общий маршрут?"

Принятый ответ на это кажется немного взломанным, хотя он явно работает, хотя похоже, что он даст код статуса 301, а не 404.

Другим подходом было бы использование прослушивателя событий для прослушивания NotFoundHttpException например.

 use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; class NotFound404Listener { protected $router; public function __construct(UrlGeneratorInterface $router) { $this->router = $router; } public function onKernelException(GetResponseForExceptionEvent $event) { if ($event->getException() instanceof NotFoundHttpException) { $url = $this->router->generateUrl(/** your route **/); $response = new RedirectResponse($url, 404); // Set redirect response to url of route with a 404 header $event->setResponse($response); } } } 

с услугой (YAML) ..

 not.found.404.listener: class: %not.found.404.listsner.class% arguments: - @router tags: - { name: kernel.event_listener, event: kernel.exception, method: onKernelException } 

Я использую это для перенаправления всех несуществующих маршрутов:

 anything: path: /{mypath} defaults: _controller: FrameworkBundle:Redirect:urlRedirect path: / #change this to whatever path permanent: true requirements: mypath: ".+" по anything: path: /{mypath} defaults: _controller: FrameworkBundle:Redirect:urlRedirect path: / #change this to whatever path permanent: true requirements: mypath: ".+" 

Я положил его на дно после всего существующего маршрута приложения.