我想重新路由所有 domainname.com/affiliateXYZ 访问AffController重新路由操作。但是如何?
'affiliate'的路由元素子字符串将是一致的,子字符串'XYZ'将会变化。
我会首选项目要求允许 domainname.com/aff/reroute/XYX (或 domainname.com/aff/reroute/CigarKing )在控制器/动作/参数格式中,但唉......不是这样。
最初,我尝试了以下尝试失败:
Router::connect('/affiliate*', array('controller' => 'aff', 'action' => 'reroute'));
Router::connect('/affiliate**', array('controller' => 'aff', 'action' => 'reroute'));
Router::connect('/:controller*', array('controller' => 'aff', 'action' => 'reroute'), array('controller'=>'(affiliate)');
一旦进入控制器重新路由动作,我会将affiliateXYZ爆炸成'XYZ',然后继续我知道如何做的事情。我的问题是将affiliateXYZ作为第一个路由元素路由到控制器,同时不会弄乱当前的功能。
我使用Router::connect('/:affiliate', array('controller' => 'aff', 'action' => 'reroute'),array('pass'=>array('affiliate')));
将信息导入控制器,直到我看到对预先存在的控制器的负面影响(我假设因为我没有明确列出所有其他控制器,我不认为我应该这样做。)。
如何路由w /前缀(更准确地说是'affiliate'的子字符串)?
我知道前缀是错误的术语。
Thx,提前。
答案 0 :(得分:1)
您正在寻找正则表达式匹配,借助此功能,您可以定义特定路径元素的匹配方式。
此选项适用于Router::connect()
的第三个参数
您可以用element => regex
格式定义它:
Router::connect(
'/:affilate',
array(
'controller' => 'aff',
'action' => 'reroute'
),
array(
'pass' => array('affilate'),
'affilate' => 'affilate[^/]+'
)
);
这将匹配以affilate
开头的任何网址,后跟一个或多个不是/
的字符。
另见http://book.cakephp.org/2.0/en/development/routing.html#route-elements