如何为不同的 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 许可获得许可。