跳到内容

如何为不同的 URL 强制使用 HTTPS 或 HTTP

编辑此页

提示

最佳 策略是在所有 URL 上强制使用 https,这可以通过您的 Web 服务器配置或 access_control 完成。

您可以在安全配置中强制站点的某些区域使用 HTTPS 协议。这可以通过使用 requires_channel 选项的 access_control 规则来完成。 要在所有 URL 上强制执行 HTTPS,请将 requires_channel 配置添加到每个访问控制

1
2
3
4
5
6
7
8
9
# config/packages/security.yaml
security:
    # ...

    access_control:
        - { path: '^/secure', roles: ROLE_ADMIN, requires_channel: https }
        - { path: '^/login', roles: PUBLIC_ACCESS, requires_channel: https }
        # catch all other URLs
        - { path: '^/', roles: PUBLIC_ACCESS, requires_channel: https }

为了在开发时更轻松,您还可以使用环境变量,例如 requires_channel: '%env(REQUIRED_SCHEME)%'。 在您的 .env 文件中,将 REQUIRED_SCHEME 默认设置为 http,但在生产环境中将其覆盖为 https

有关 access_control 的更多详细信息,请参阅 安全访问控制如何工作?

注意

强制执行 HTTP 或 HTTPS 的另一种方法是使用路由或路由组的scheme 选项

注意

在使用反向代理或负载均衡器时强制执行 HTTPS 需要正确的配置,以避免无限重定向循环; 有关更多详细信息,请参阅如何配置 Symfony 以在负载均衡器或反向代理后工作

这项工作,包括代码示例,根据 Creative Commons BY-SA 3.0 许可获得许可。
目录
    版本