Symfony2路由,在没有重定向的情况下强制执行HTTPS

时间:2014-03-10 20:03:51

标签: symfony

如何在Symfony2中定义需要HTTPS但不自动从HTTP重定向的路由?

例如,我已经知道我可以设置“方案”,例如:

 demo:
     resource: "@DemoBundle/Controller/DemoController.php"
     type:     annotation
     prefix:   /api/demo
     schemes:  [https]

这会将用户从“http://www.example.com/api/demo/ {route}”重定向到“https://www.example.com/api/demo/ {route}”。但是,我希望尝试使用“http”失败并出现404或500错误,而直接尝试使用“https”的路由成功。

更新

我在路由文件中保留了“schemes”参数,并将以下内容添加到我的.htaccess文件中:

RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} api
RewriteRule ^(.*)$ %{ENV:BASE}/ssl-only.php [R,L]

1 个答案:

答案 0 :(得分:0)

我建议从路由中删除schemes: [https],而是检查Controller中的方案,如果不是HTTPS,则将其重定向到您想要的特定错误页面:

public function yourRoutingAction()
{
    if ($this->getRequest()->getScheme() == 'http') {
        return $this->redirect($this->generateUrl('specific_route', 301));
    }
    //Otherwise continue your process
    //You can change the Status code to whatever you want instead of 301
}