我遇到了不正常的行为,使用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
的控制器插件中执行此操作可以消除两次出现的应用程序目录。
有没有人有建议来解决这个问题,或者有什么建议可以进一步了解它?
答案 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