ZF2: Define URL http or https



我的问题是。我的应用程序中有几个页面使用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');为用户的路由。

最新更新