Как лучше всего перенаправить URL на известную домашнюю страницу - PullRequest
0 голосов
/ 11 ноября 2018

Во-первых, пожалуйста, поймите, что я использую 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, которое я описал выше?

...