301使用Cakephp重定向

301使用Cakephp重定向,php,cakephp,redirect,routes,Php,Cakephp,Redirect,Routes,我试图301重定向一个网址到一个新的地方,因为原来的网页已经不存在了。我尝试运行的URL是Guns/Rifles/Heckler_Koch/MP5_A4。我需要这个重定向到Guns/Heckler\u Koch/。我已经尝试了很多东西,但这是我唯一能想到的,它不起作用。当我运行此程序时,它会将我带到,制造商/项目/。谢谢你的帮助 Router::connect( '/Guns/:manufacturer', array('controller' => 'manufactu

我试图301重定向一个网址到一个新的地方,因为原来的网页已经不存在了。我尝试运行的URL是Guns/Rifles/Heckler_Koch/MP5_A4。我需要这个重定向到Guns/Heckler\u Koch/。我已经尝试了很多东西,但这是我唯一能想到的,它不起作用。当我运行此程序时,它会将我带到,制造商/项目/。谢谢你的帮助

Router::connect(
    '/Guns/:manufacturer', 
    array('controller' => 'manufacturers', 'action' => 'items'), 

    array('pass' => array('manufacturer'), 'routeClass' => 'GunRoute')
);


Router::redirect(
    '/Guns/Rifles/:manufacturer/*', 
    array('controller' => 'manufacturers', 'action' => 'items'),
    array('pass' => array('manufacturer'), 'status' => '301')        

);

除了伪控制器示例并不等同于Kevin试图做的事情。将其编辑成一个准确的答案-pass->persist是“问题”。因此,请参阅上面@ndm的评论,它应该是这样工作的,但不会/不会。因为它不存在,所以您前面的控制器示例实际上是合适的。我建议保留路由更正,因为它最终会得到更正,并且会起作用,但添加任何您认为合适的(足够完整的)解决方案作为替代方案。控制器操作、分派筛选器或扩展重定向路由类是显而易见的解决方法。在您的伪重定向示例中,您只缺少了
'manufacturer
=>$this->…['manufacturer']`这不起作用,当我将connect设置为persist时,它仍然会创建重定向,因为/manufacturers/itemsI最终使用了@Anubhav original solution,因为我不知道如何处理routes.php。你应该把原来的答案放回原处,因为这是唯一对我有效的方法。我想你缺少的是
pass
应该是
persist
。一般来说,您可以确定为什么生成的url不是您期望的url。还请注意301是默认的重定向状态代码。我不能确定,所以我不会添加它作为答案,但看起来可能有错误,因为@AD7six说您应该使用persist,但这仍然不起作用,因为数组最终被传递到
Router::reverse()
将包含一个
pass
键,该键填充与
*
匹配的内容,以及一个
url
键,该键也会导致整个操作失败(即使它是空的)…@ndm观察/预测良好-只有pass键才会导致问题,例如,这将适用于问题中的路径:
curl-Ihttp://app.dev/Guns/Rifles/Heckler_Koch/
,这不会
卷曲-Ihttp://app.dev/Guns/Rifles/Heckler_Koch/anything
。反向布线就是这样一个笨重的特性。
Router::connect(
    '/Guns/:manufacturer', 
    array('controller' => 'manufacturers', 'action' => 'items'), 
    array('persist' => array('manufacturer'), 'routeClass' => 'GunRoute')
);