如何在Symfony模式重定向上更改HTTP代码

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

标签: php symfony symfony4

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

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

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

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

是否可以更改响应代码?还是有更好的方法将应用程序的一部分保留在HTTP上,将一部分保留在HTTPS上?

1 个答案:

答案 0 :(得分:1)

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

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

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

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

即使按Symfony标准,也异常复杂。