本文概述
- 要求
- 实现
- 建立路线
要求
- 你需要有效的SSL证书, 然后才能在与你的域相关的服务器中启用HTTPS。你可以选择创建自签名证书或购买由证书颁发机构(CA)颁发的证书。
如果你不想支付SSL证书的费用, 建议你尝试使用免费, 自动且开放的证书颁发机构Let’ s Encrypt。
确定服务器具有SSL有效证书后, 请继续在Symfony项目中强制使用此协议。请注意, 即使你已安装并可用SSL证书, 除非你这样做, 否则symfony不会强制使用HTTPS。
实现当前在Symfony 3中, 有两种启用HTTPS的方法:
A.单条路线
要在单个路由中强制HTTPS连接, 请使用schemes选项并将其设置为https:
mainbundle_route_identifier:path:/route-namedefaults: { _controller: sandboxmainBundle:Default:action_controller}# Force HTTPSschemes: [https]
随机分发包的routing.yml文件中的示例:
## Project accesible at http://project.com/# 1. None scheme set, http used by defaultmainbundle_homepage: # http://project.com/path:/defaults: { _controller: sandboxmainBundle:Default:index}mainbundle_contact: # http://project.com/conctactpath:/contactdefaults: { _controller: sandboxmainBundle:Default:contact}# 2. Secured by forcing HTTPS in the routesmainbundle_blog: # https://project.com/blogpath:/blogdefaults: { _controller: sandboxmainBundle:Default:blog}schemes: [https]mainbundle_login: # https://project.com/loginpath:/logindefaults: { _controller: sandboxmainBundle:Default:login}schemes: [https]
B.添加安全规则
安全组件提供了另一种通过require_channel设置实施HTTP或HTTPS的方法。这种替代方法更适合于保护网站的” 区域” (/ admin下的所有URL), 而不是手动指定每个路由。
你可以通过在security.yml文件的access_control属性内添加新的路由规则来修改/app/config/security.yml文件, 以指定应用程序具有的URL。此规则需要包含3个属性:
- path:符合规则的路由。
- 角色:将应用此规则的角色。
- require_channel:强制执行的协议(在本例中为https)。
security:# ... #access_control:- { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
或仅用于登录路径:
security:# ... #access_control:- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
建立路线Symfony将根据Twig或PHP的设置(在控制器中)自动根据HTTP或HTTPS的设置生成路由, 因此你无需担心如果用户处于安全路由中会发生什么情况, 重定向到不安全的路由(无论如何, 如果发生一些异常情况, 如果你设置了require_channel或schemes, 它将被自动重定向)。
如果你生成安全路由的URL, 并且当前方案为HTTP, Symfony将自动使用HTTPS生成绝对URL(包括域https://domain.com/secure-route)。
注意:既然HTTPS已启用并可用, 则由于强制加密, 旧的HTTP(不安全)路由将不再可用, symfony会将HTTP URL重定向到它们的等效HTTPS。
【如何在Symfony 3中强制通过HTTPS(基于SSL的HTTP)进行访问】玩得开心 !
推荐阅读
- 如何在Symfony 3中使用SnappyBundle(wkhtmltoimage)创建网站的屏幕截图
- 如何在Symfony 4中安装和配置FOSUserBundle
- 如何使用LFTP脚本使用LFTP(sftp)下载远程目录
- 如何使用Doctrine和Symfony 3实现Soundex搜索(在MySql中)
- 如何解决Ubuntu 16.04中的Plesk安装/升级错误(系统中没有/etc/localtime文件)
- 如何在AWS Ubuntu 16.04实例上以root身份允许SSH和SFTP访问
- 在Plesk中创建MySQL Server数据库的非增量(逻辑备份)自动备份外壳脚本(sh)
- 如何在Mac上找到Android SDK Manager路径
- Android向后兼容性