Во-первых, пожалуйста, поймите, что я использую Symfony версии 2.8, и в настоящее время я не готов перейти на более новую версию И что я в некоторой степени новичок в Symfony.
Проблема, которую я пытаюсь решить, заключается в том, что я хочу перенаправить URL-адреса на домашнюю страницу моего сайта, как показано в следующих примерах:
mydomain.com{/*1} => mydomain.com/home
mydomain.com/home{/} => mydomain.com/home
mydomain.com/home/{anything else*2}{/} => mydomain.com/home and
{anything else} goes into the $_POST array.
mydomain.com/demo{/} => mydomain.com/home/demo
mydomain.com/demo/home{/} => mydomain.com/home/demo
mydomain.com/demo/home/{anything else}{/} => mydomain.com/home/demo and
{anything else} goes into the $_POST array.
mydomain.com/home/demo/{anything else}{/} => mydomain.com/home/demo and
{anything else} goes into the $_POST array.
mydomain.com/xyzzy*2{/} => mydomain.com/home/xyzzy*2
mydomain.com/xyzzy/home{/} => mydomain.com/home/xyzzy
mydomain.com/xyzzy/home/{anything else}{/} => mydomain.com/home/xyzzy and
{anything else} goes into the $_POST array.
mydomain.com/home/xyzzy/{anything else}{/} => mydomain.com/home/xyzzy and
{anything else} goes into the $_POST array.
mydomain.com/unknown*2{/} => mydomain.com/404page/unknown*2
mydomain.com/unknown/home{/} => mydomain.com/404page/unknown
mydomain.com/unknown/home/{anything else}{/} => mydomain.com/404page/unknown and
{anything else} goes into the $_POST array.
mydomain.com/home/unknown/{anything else}{/} => mydomain.com/404page/unknown and
{anything else} goes into the $_POST array.
*1 The / at the end of the URL should be removed when it is redirected so as to not cause
an error if the use includes it in the original URL.
*2 In the these examples the xyzzy, {anything else}, and unknown are placeholders, where
the xyzzy word is any word that has been previously registered in my database, the
{anything else} is what ever else the user types in, and unknown is any word that hasn't
been previously registered in my database.
Первые семь случаев, в которых указывается только домен с или без подкаталогов home или demo, могут быть легко обработаны с использованием правил в файле .htaccess, хотя я не уверен, как обращаться с {чем-либо еще} часть, которая передается Symfony и не обрезается.
Проблема заключается в том, что остальные URL-адреса с заполнителями xyzzy необходимо переставить так, чтобы часть xyzzy, что когда-либо указывалось на самом деле, перемещалась от домашнего слова, если оно указано, к домашнему слову в измененный URL, а затем часть {что-нибудь еще}, когда это тоже указано.
Конечно, я мог бы записать отдельные маршруты в пакет Symfony, которые обрабатывают домашнюю страницу, которая имеет дело с заполнителем xyzzy или демо, но так как я не знаю, сколько будет различных фактических значений для заполнителя xyzzy, я предпочитайте перемещать заполнитель xyzzy и демо-версию после home в URL-адресе, так что в пакете Symfony должно быть только одно домашнее действие, а значение-заполнитель xyzzy и демо-версия становятся единственной переменной в маршруте действия.
Неизвестный заполнитель слова также должен обрабатываться той же переменной маршрута, что и заполнитель xyzzy и демо, и затем код выводит в браузер сообщение о фактическом значении, отсутствующем в базе данных.
Наконец, обычно должны выводиться ситуации, не перечисленные выше, в том числе ошибки 404, о которых я не задумывался.
Я видел несколько разных подходов к выполнению частей того, о чем я говорю, включая использование переписывания .htaccess, переписывание кода обработки событий Symfony kernel.exception или использование собственного подписчика на события, но во многом это похоже на слишком много, и некоторые из них не работают в процессе разработки. Итак, как лучше всего обработать преобразование URL, которое я описал выше?