2017-07-10 28 views
0

对于开发,我使用主机文件覆盖来指向我的本地IP地址http://project.dev/如何在ip和端口号中使用`Zend Mvc Router Http Hostname`?

在我module.config.php文件我有(加子路由等):

'router' => [ 
    'routes' => [ 
     'home' => [ 
      'options' => [ 
       'route' => 'project.dev', 
      ], 
     ], 
    ], 
], 

我现在实行有回调的支付网关。我如何改变这条路线来接受我的公共IP地址和端口号?

我已经尝试了简单的交换:

'router' => [ 
    'routes' => [ 
     'home' => [ 
      'options' => [ 
       'route' => '12.34.56.78:1234', 
      ], 
     ], 
    ], 
], 

但不起作用(路径未找到)。我换了一个变量的端口号:

  'options' => [ 
       'route' => '12.34.56.78:port', 
       'constraints' => [ 
        'port' => ':1234', 
       ], 
      ], 

但这也没有奏效。

如何使用Zend\Mvc\Router\Http\Hostname与IP和端口号?

是否可以在一条路径中指定两者?

我还有一个Zend\Mvc\Router\Http\Hostname路线,与子域专门处理:

 'subdomains' => [ 
      'options' => [ 
       'route' => ':sub.project.dev', 
      ], 
     ], 

如果IP地址被放入路线,:sub会去年底(例如12.34.56.78(:port)?/:sub)。在这种情况下,是否可以在一个路由中指定域名和IP?例如':sub.project.dev|12.34.56.78(:port)?/:sub'

回答

0

Zend\Mvc\Router\Http\Hostname不打扰端口号。因此,该路线可以仅作为'route' => '12.34.56.78',

添加子域是不可能的。 作为的子域或子文件夹。 IP的请求从根本上不能包含子域组件。如果你尝试它,你会得到一个可爱的错误信息(站点无法到达,无法找到服务器的DNS地址)。此路由器只匹配请求的主机名部分,即第一个/之前的所有内容。这意味着它不能匹配请求的文件夹部分。

那么 - 我该如何解决?

为主要途径,我只是改变了IP地址和丢弃的端口号:

//easy enough 
'router' => [ 
    'routes' => [ 
     'home' => [ 
      'options' => [ 
       'route' => '12.34.56.78', 
      ], 
     ], 
    ], 
], 

由于我将要开发和测试这种使用指定的参数,我决定进入这些默认值对于变量:

'router' => [ 
    'routes' => [ 
     'subdomains' => [ 
      'options' => [ 
       'route' => '12.34.56.78', 
       'defaults' => [ 
        'sub' => 'abcd', //default subdomain to use. 
       ], 
      ], 
     ], 
    ], 
], 

陷阱

当使用url视图帮助程序,指定['force_canonical' => true]将不会回显端口号,这意味着以该方式加载资源的任何请求都不会解析(12.34.56.78!= 12.34.56.78:1234)。如果所有的请求都是相对的,那么没有问题。否则,问题。

不是最好的解决方案,因为一旦完成此功能,我将不得不撤消这些更改,但是希望足够好以允许支付网关在没有问题的情况下进行回调,直到我可以将此代码放到临时服务器上(这成为moo point)。

相关问题