如何最好地将URL重定向到已知主页

时间:2018-11-11 17:00:12

标签: .htaccess symfony redirect http-status-code-404

首先,请了解我正在使用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文件中的规则轻松处理,尽管我不确定如何处理{anything}以便传递给Symfony而不是切断。

问题在于,其余带有xyzzy占位符的URL需要重新排列,以便将实际指定的xyzzy部分从指定时的主词之前移到主词中的主词之后。修改后的网址,然后在指定了网址后再加上{anything}部分。

当然,我可以将单独的路由写入一个Symfony捆绑包中,该捆绑包处理用于处理xyzzy占位符或演示的主页,但是由于我不知道xyzzy占位符有多少不同的实际值,我宁愿将xyzzy占位符和demo移到URL中的home之后,以便Symfony捆绑包中只需要一个home动作,并且xyzzy占位符的值和demo成为动作路线中的单个变量。

还应该使用与xyzzy占位符和demo相同的路由变量来处理未知单词占位符,然后代码将向浏览器输出一条有关实际值不在数据库中的消息。

最后,应该正常输出上面未列出的情况,包括我没有想到的404错误情况。

我已经见过几种不同的方法来完成我所讨论的部分内容,包括使用.htaccess重写,重写Symfony内核,异常事件处理代码或使用自定义事件订阅者,但是其中大部分似乎过度杀伤,其中一些在开发中不起作用。那么,上面处理我所说的URL转换的最佳方法是什么?

0 个答案:

没有答案