我的问题是。我的应用程序中有几个页面使用SSL,比如登录页面。当我在主页(谁没有SSL),由视图(href=$this->url(…))创建的每个链接是纯html,甚至登录页面。另一方面,当我在登录页面,每一个其他链接显示与https。
在控制器中,我操作页面是否使用SSL,这是可以的。但我想显示正确的链接,为用户当他通过网站导航,https的ssl页面和http的非ssl的。
谢谢。
首先,如果您有HTTPS可用,您应该在任何页面上使用它。当您有一些页面可以通过HTTPS访问,而其他页面不能访问时,这确实是违反信任网络的。当然,您可能会在某些页面上强制使用HTTPS(因此没有HTTP),但反之亦然总是一个坏主意。
也就是说,您可以创建scheme
路由。使用该方案,您可以在某些路由上指定HTTPS:
'secure' => [
'type' => 'scheme',
'options' => [
'scheme' => 'https',
'defaults' => [
// the usual stuff
],
],
'may_terminate' => false,
'child_routes' => [
// all your https routes here
],
],
因为这些"安全"路由中的一些可能是在供应商级别定义的(例如你使用ZfcUser),你可以使用路由的"原型"。例如,所有ZfcUser路由应该只能通过HTTPS访问。ZfcUser的"主"路由是zfcuser
:
'router' => [
'prototypes' => [
// Define "secure" prototype to add to routes
'secure' => [
'type' => 'scheme',
'options' => ['scheme': 'https'],
],
],
// Apply the scheme route to ZfcUser
'routes' => [
'zfcuser' => [
'chain_routes' => ['secure'],
],
],
],
原型将secure
路由"前置"到zfcuser
。因此,这使得zfcuser
及其所有子路由成为secure
的子路由。因此,所有zfcuser
路由都定义为HTTPS。
当你走到这一步:如果你现在组装路由,它们将自动获得HTTPS。当您在我的第一个示例的secure
路由中有一个路由login
时,您将通过$this->url('secure/login');
获得url。
在第二种情况下(原型),你不需要提到原型,只需使用$this->url('zfcuser');
为用户的路由。