【问题标题】:Symfony JMSI18nRoutingBundle redirect with 301Symfony JMSI18nRoutingBundle 重定向与 301
【发布时间】:2017-10-09 11:37:54
【问题描述】:

是否可以强制 Bundle 使用区域设置前缀和 301 状态代码而不是 302 进行重定向?这对 SEO 来说会很棒。

【问题讨论】:

    标签: symfony redirect routing http-status-code-301


    【解决方案1】:

    代码的快速峰值:是的。永久重定向发生在 I18nRouter 内部(以及在那里调用的重定向控制器)

    https://github.com/schmittjoh/JMSI18nRoutingBundle/blob/master/Router/I18nRouter.php#L258

    您可以覆盖 I18nRouter(match() 方法应该是相关位)并将$permanent 更改为false

    有关 Symfony 中覆盖的更多信息,请查看https://symfony.com/doc/current/bundles/override.html

    【讨论】:

    • 感谢您的快速回复。我可以这样做,但是我必须复制这个非常长的方法的代码,并且不保存更新(因为它是 I18Router.php 中的私有方法)。有没有其他简单又省钱的方法?
    • @Mojo 覆盖控制器中的 redirectAction 并扩展它(例如,就像你覆盖 FOSUserBundle 中的控制器),但在执行 parent::redirectAction() 之前更改 $permanent
    • 这是个好主意。但我无法让覆盖工作。我创建了一个实现以下功能的新 Bundle:public function getParent() { return 'JMSI18nRoutingBundle'; } 然后我创建了一个控制器,它从 Bundle 中扩展了 RedirectController 并插入了 redirectAction() 来覆盖它。在那里我更改了$permanent 并使用 ne 变量调用return parent::redirectAction(),但没有任何反应。我还插入了一个die() 来测试它,但该站点一如既往地运行。
    • 如果我理解正确,捆绑包在预期文件夹中没有任何 routing.yml:https://github.com/schmittjoh/JMSI18nRoutingBundle/tree/master/Resources/config 只有一个 services.xml。还有其他可以存放的地方吗?
    【解决方案2】:

    您可以在响应侦听器中简单地更改响应状态代码。

    【讨论】:

    • 请进一步解释 - 如何应该这样做?
    • @NicoHaase 检查pathInfo是否等于'/',然后将状态码更改为301 if ($event->getRequest()->getPathInfo() === '/') { $event->getResponse()->setStatusCode(301); }
    • 请通过编辑将所有解释添加到您的答案中
    猜你喜欢
    • 2013-01-07
    • 2013-01-15
    • 1970-01-01
    • 2018-04-12
    • 2015-06-13
    • 1970-01-01
    • 2014-08-29
    • 2013-03-01
    • 2011-02-01
    相关资源
    最近更新 更多