Zend _redirect错误:两次添加基本URL

时间:2012-01-25 01:16:43

标签: zend-framework redirect

我遇到了不正常的行为,使用Zend控制器_redirect方法。

我的应用程序副本是通过DocumentRoot中的符号链接产生的。我的默认路由器也是自定义的,以响应这种模式:

http://localhost/<appSymLink>/<param_A>/<controller>/<action>/

从控制器中,我构建了一个如下的URL:

$url = $this->_helper->url('action', 'controller', $param_A = 'valueA');

如果我访问网址:

http://localhost/<appSymLink>/<param_A>/<controller>/<action>/

此变量包含以下字符串:

/<appSymLink>/<param_A>/<controller>/<action>/

当我致电

$this->_redirect($url);

用户被显式重定向到此路径,具有冗余基本路径

/<appSymLink>/<appSymLink>/<param_A>/<controller>/<action>/

Zend似乎在两次基础路径之前。

我的同事的应用程序副本存在于他的DocumentRoot中,他没有遇到这个问题。

在操作中定义一个空的基本路径,就在操作之前,就像这样工作:

$this->getRequest()->setBaseUrl('');

这显然不是一个可行的解决方案。另一方面,在routeShutdown的控制器插件中执行此操作可以消除两次​​出现的应用程序目录。

有没有人有建议来解决这个问题,或者有什么建议可以进一步了解它?

2 个答案:

答案 0 :(得分:6)

如果使用从Url帮助程序生成的URL重定向,则需要通知重定向程序它已经以基本URL为前缀。

只需使用以下

即可
return $this->redirect($url, array('prependBase' => false));

答案 1 :(得分:4)

尝试将prependBase选项设置为FALSE
$this->_redirect($url, array('prependBase' => FALSE);

  

摘自ZF参考文献:

   _redirect($ url,array $ options = array()):重定向到另一个位置。此方法采用URL和一组可选选项。通过   默认情况下,它执行HTTP 302重定向。

     

选项可能包括以下一项或多项:

     

退出:是否立即退出。如果需要,它会   干净地关闭所有打开的会话并执行重定向。

     

您可以使用控件在控制器中全局设置此选项   setRedirectExit()访问器。

     

prependBase:是否添加注册的基本URL   提供的URL的请求对象。

     

您可以使用控件在控制器中全局设置此选项   setRedirectPrependBase()访问器。

     

代码:重定向中使用的HTTP代码。默认情况下,HTTP   使用302;可以使用301和306之间的任何代码。

     

您可以使用控件在控制器中全局设置此选项   setRedirectCode()访问器。

如果这不起作用,我可以建议动作助手'重定向器' 常用:
$this->_helper->getHelper('Redirector')->gotoSimple($action, $controller = null, $module = null, array $params = array())
Action Helper Redirector