ZF2:定义URL http或https

时间:2014-07-16 17:33:56

标签: php url ssl https zend-framework2

这是我的问题。 我的应用程序中有几个页面使用SSL,比如lggin页面。当我在主页面(谁没有SSL)时,视图(href = $ this-> url(...))创建的每个链接都是纯HTML,甚至是登录页面。另一方面,当我在登录页面时,每个其他链接都显示为https。

在控制器中,如果页面使用SSL,我会操纵,即可。但是我希望在用户浏览网站时显示正确的链接,为ssl页面显示https,为非ssl页面显示http。

感谢。

1 个答案:

答案 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');作为用户的路线。