如何在 symfony 模式重定向上更改 http 代码

How to change http code on symfony schema redirect

我正在将旧应用程序迁移到 Symfony,出于 SEO 的原因,需要将其一部分保留在 HTTP 上,一部分保留在 HTTPS 上。

我在 routing.yaml 中使用 schemes 配置密钥:

route_name:
    path: ...
    schemes: [HTTP]

我遇到的问题是 Symfony 通过 HTTP 301 Moved Permanently 从 HTTPS 重定向到 HTTP,但我希望它只是暂时重定向,因为我们计划在明年完全切换到 https。

有没有办法更改响应代码?或者是否有更好的方法将应用程序的一部分保留在 HTTP 上,而另一部分保留在 HTTPS 上?

我很感兴趣,所以我研究了一下。不幸的是,这似乎比我预期的要难一些。

永久重定向是硬编码的,请参阅:

https://github.com/symfony/symfony/blob/master/src/Symfony/Bundle/FrameworkBundle/Routing/RedirectableUrlMatcher.php#L35

没问题,您只需将匹配器替换为您自己的...但是不行。匹配器没有注入路由器,而是在路由器预热期间创建的。

https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Routing/Router.php#L270

至少 matcher_class 选项似乎是我们正在寻找的。不幸的是,这也是硬编码的:

https://github.com/symfony/symfony/blob/master/src/Symfony/Bundle/FrameworkBundle/Resources/config/routing.xml#L66

看起来您将创建一个自定义匹配器(使用 permanent => false),并使用编译器传递重新定义路由器配置。

异常复杂,即使按照 Symfony 标准也是如此。