我的整个应用程序应该通过HTTPS访问, vhost已正确配置,当我使用HTTPS前缀调用任何应用程序页面时,它会正确响应。
但是,当我尝试通过应用程序中生成的链接访问页面时。它总是指向常规的HTTP链接。
我首先尝试使用.htaccess文件将所有流量重定向到HTTPS。花了几个小时尝试我在网上找到的每个重定向方法,但由于某种原因,我总是得到一个无限重定向循环。
现在我试图以不同的方式解决这个问题:直接在HTTPS中生成我的链接。我的所有链接都是使用twig-bridge提供的URL()
函数生成的。
使用Symfony
进行配置非常简单但我无法弄清楚如何用Silex做到这一点。是否有一种简单的方法可以在Silex中更改路由方案以强制使用HTTPS前缀生成每个链接?
答案 0 :(得分:4)
将requireHttps()
添加到路由生成器,就可以了。
示例:
$app->get('/hello-world', function($app) {
return 'Hello world';
})
->bind('hello') // Set route name (optional of course)
->requireHttps(); // This would force your url with https://
您还可以查看API以获取更多信息。你会在那里找到你需要的一切。
答案 1 :(得分:1)
将环境变量HTTPS
设置为on
。
Nginx配置位置:fastcgi_param HTTPS on;
Apache的.htaccess或vhost配置:SetEnv HTTPS on
请注意,官方文档中的默认nginx配置会将此变量设置为off
,这可能会被复制到https网站并且错误:
http://silex.sensiolabs.org/doc/web_servers.html
Ctrl + F - fastcgi_param HTTPS off;
答案 2 :(得分:1)
如果您使用Controller Providers,则可以使用Controller
类中的requireHttps()
方法为整个路径范围要求HTTPS:
namespace Acme;
use Silex\Application;
use Silex\Api\ControllerProviderInterface;
class HelloControllerProvider implements ControllerProviderInterface
{
public function connect(Application $app)
{
$controllers = $app['controllers_factory'];
$controllers->get('/', function (Application $app) {
return $app->redirect('/hello');
});
$controllers->get('/another-page', 'Acme\HelloControllerProvider::doSomething')->bind('another-page');
// here it goes
$controllers->requireHttps();
// or even make it more flexible with a config variable
// if ($app['config']['require_https']) (
// $controllers->requireHttps();
// }
return $controllers;
}
}
答案 3 :(得分:0)
对于那个具体案例,我解决了在app.php中声明基本URL的问题:
$app['customBaseUrl'] = 'https://mybaseurl';
然后使用此自定义baseUrl为我的所有链接添加前缀。这些链接不再由url()twig函数生成。
虽然不是最漂亮的方式。如果您的服务器配置允许您使用它,我会推荐Artamiel的答案。
答案 4 :(得分:0)
另一种选择是在SecurityServiceProvider设置中使用access_control(如果您使用此设置)通过指定某些路由来指定某些路由需要使用https 'requires_channel'=>安全配置的access_control部分中的“https”。