跳到內容

如何針對不同 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 授權條款授權。
目錄
    版本