_forward() just forwards everything to another controller action, while _redirect() sends a header, meaning you create a new HTTP Request and go through the entire dispatch process with it.
_forward() protected function will edit the request to transfer it to another controller/action class. This will not change the request url.
_redirect() This method will redirect to another controller/action class and also change the response http header and the request url.
For instance, if you call up http://www.webtechbuzz.com/foo/bar you'd call the foo controller and bar action. If you forward inside the http://www.webtechbuzz.com/foo/bar action to the http://www.webtechbuzz.com/foo/baz action, e.g. within the very same request, the browser would still be on the same URL, while when doing a redirect, ZF would instruct the browser to load