Custom URLs in Zend Framework (v1.6.1)
If you are having problems with custom URLs in Zend Framework – you’re not alone.
Recently I was rewriting one of my websites using ZF. The site is old, well ranked in search engines. In a situation like this you don’t really want to change URL structure. So i started to play with Apache rewrite rules and got stuck.
The problem is, that by default HTTP request object is using $_SERVER['REQUEST_URI'] which means that even after setting rule like
RewriteRule ^articles/(.*)$ articles/view/url/$1 [L]
won’t work, because $_SERVER['REQUEST_URI'] remains unchanged.
To fix this, I’ve changed Http.php in library/Zend/Controller/Request/ and on line 391(should be the same if you are using same version as me, or look for public function setRequestUri($requestUri = null) ) and replaced
389: if (isset($_SERVER['HTTP_X_REWRITE_URL'])) { // check this first so IIS will catch
390: $requestUri = $_SERVER['HTTP_X_REWRITE_URL'];
391: }elseif (isset($_SERVER['REQUEST_URI'])) {
394: $requestUri = $_SERVER['REQUEST_URI'];
395: }elseif (isset($_SERVER['ORIG_PATH_INFO'])) { // IIS 5.0, PHP as CGI
with:
389: if (isset($_SERVER['HTTP_X_REWRITE_URL'])) { // check this first so IIS will catch
390: $requestUri = $_SERVER['HTTP_X_REWRITE_URL'];
391: }elseif(isset($_SERVER['PATH_INFO'])){
392: $requestUri = $_SERVER['PATH_INFO'];
393: }elseif (isset($_SERVER['REQUEST_URI'])) {
394: $requestUri = $_SERVER['REQUEST_URI'];
395: } elseif (isset($_SERVER['ORIG_PATH_INFO'])) { // IIS 5.0, PHP as CGI
It’s a quite dirty hack because you have to change core files and need to remember that before updating ZF to a new version, but it does the job.
If you know a better solution – please let me know!






June 25th, 2009 at 9:05 pm
[...] I care about URL’s much, to make search engines happy mostly I’m using this trick for custom URL’s with Zend Framework And the reason why it stopped working is that 1and1 is not giving you $_SERVER['PATH_INFO'] any [...]