security.yml
有access_control
个条目,每个条目都是:
我的理解是Symfony每个请求只匹配一个,但这也是强制执行HTTPS的最高级别。
那么,这是否意味着针对每个唯一网址格式/角色要求的重复规则?
答案 0 :(得分:1)
您是对的,对于每个传入请求,Symfony将根据 URI 决定使用哪个access_control
,客户端 IP地址< / em>,传入&#34;主机名称&#34;!,以及请求方法。
但是为了你的幸福,有一种方法可以不重复规则并达到同样的目标。
parameters.yml
文件&#34; 它定义了通常在每台服务器上更改的值。
首先,在本地开发机器中,在app/config/parameters.yml
文件中定义一个新参数,命名为&#34; requires_channel&#34; :
# in your local development machine (development)
parameters:
database_driver: pdo_mysql
# ...
requires_channel: http # <- Wow! I can use this var anywhere into my configuration :)
在生产服务器中进行相同操作,但设置https
:
# in your deployment server (production)
# app/config/parameters.yml
parameters:
database_driver: pdo_mysql
# ...
requires_channel: https # <- I need enforce https redirection now in production server
现在,您只能为每个条目定义一个规则并使用新的%requires_channel%
参数:
# app/config/security.yml
security:
# ...
access_control:
- { path: ^/admin, role: ROLE_ADMIN, requires_channel: '%requires_channel%' }
# ...
%requires_channel%
:其值取决于运行应用程序的主机。
请注意,host
属性不再重要,因为之前需要区分这两个规则。
此解决方案可以通过使用环境配置文件(config_dev.yml
和config_prod.yml
)来完成,但您可能还需要在localhost(http)中测试您的应用程序的prod环境。所以上面的解决方案对你来说应该足够了;)
我希望我能帮助你!