如何針對不同 URL 強制使用 HTTPS 或 HTTP
提示
最佳 策略是在所有 URL 上強制使用 https
,這可以透過您的網頁伺服器設定或 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 如何運作? 以取得關於一般 access_control
的更多詳細資訊。
注意
強制執行 HTTP 或 HTTPS 的另一種方法是使用路由或路由群組的scheme 選項。
注意
在使用反向代理或負載平衡器時強制執行 HTTPS 需要正確的設定,以避免無限重新導向迴圈;請參閱如何在負載平衡器或反向代理後方設定 Symfony 以進行運作以取得更多詳細資訊。
本作品,包括程式碼範例,根據 Creative Commons BY-SA 3.0 授權條款授權。