如何将控制器/操作设置为Page Not Found

jbl*_*lue 9 php zend-framework zend-route

我有一个控制器和操作,我通过自定义URL访问.尽管在默认位置仍可访问原始路线

zend.com/controller/action
Run Code Online (Sandbox Code Playgroud)

当用户尝试访问此URL时,如何更改此设置以模拟"找不到页面"?可能吗?

Ale*_*lec 6

您可以更改主控制器脚本以将某个控制器名称和操作名称重定向到新页面.但是,向.htaccess文件添加新规则可能更容易,这表明应将此特定URL重定向到错误页面.例:

RewriteRule ^controller/action/?$ / [R=404,L]
Run Code Online (Sandbox Code Playgroud)

或者将页面重定向到您网站中的错误页面:

RewriteRule ^controller/action/?$ /error/page-not-found/ [L]
Run Code Online (Sandbox Code Playgroud)


bog*_*min 6

如果动作处理程序用于响应两个URL,则首先必须检测正在请求的URL(使用$ this - > _ request-> getRequestUri()).如果检测到默认URL,我认为创建"未找到页面"的最简单方法是使用

$this->_redirect("/path/to/simulated/404/page") 
Run Code Online (Sandbox Code Playgroud)

并设置一个控制器和动作来响应.

但是,这实际上不会发送HTTP 404.为此,我认为您必须在动作处理程序中引发异常.我不知道这样做的官方"zendy"方式是什么,但这似乎有效:

throw new Zend_Controller_Action_Exception('Not Found', 404);
Run Code Online (Sandbox Code Playgroud)