这是我的问题。 我的应用程序中有几个页面使用SSL,比如lggin页面。当我在主页面(谁没有SSL)时,视图(href = $ this-> url(...))创建的每个链接都是纯HTML,甚至是登录页面。另一方面,当我在登录页面时,每个其他链接都显示为https。
在控制器中,如果页面使用SSL,我会操纵,即可。但是我希望在用户浏览网站时显示正确的链接,为ssl页面显示https,为非ssl页面显示http。
感谢。
答案 0 :(得分:2)
首先,如果您有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。如果您在第一个示例的login
路线中有路线secure
,则会通过$this->url('secure/login');
获取网址。
在第二种情况下(原型设计),您不需要提及原型,只需使用$this->url('zfcuser');
作为用户的路线。