April 12th, 2010 Category: Zend Framework
No Comments »
En uno de los proyectos que tengo abierto tengo una aplicacion en Zend Framework en un http://www.dominio.com, cree una aplicacion que complementa a esta primera también en ZF, pero en realidad es otro sitio, otra base, y otro modelo de negocio, pero por un tema de SEO, la segunda aplicacion tenia que ser accesible únicamente desde http://www.dominio.com/segundaAPp/ y no desde http://www.segundaApp.com/.
La solución es muy simple, pero por ahi alguno tiene o tuvo este problema y no supo resolverlo.
En el .htaccess de la aplicacion principal tenemos el siguiente código en una aplicacion creada con Zend_Application.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
Lo que hace es, sino encuentra la carpeta/archivo en el directorio actual, ejecuta el index.php el cual parsea la url, para detectar el modulo, controller, action.
A estas lineas hay que agregarle una regla, que si la uri empieza con segundaApp, hay que redireccionar a el index.php de segundaApp. Mi solución fue crear un symlink desde la segunda aplicacion hasta la app actual con el nombre de la segundaApp.
RewriteEngine On
#segundaApp.php es un symlink a ../../segundaApp/public/index.php
RewriteRule ^ segundaApp.php [NC,L]
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
Ahora lo que falta es crear reglas de ruteos dentro de segundaApp para poder redireccionar al controller especifico la url correcta.
Otra forma seria poder agregar módulos dentro de segundApp, pero esto no lo probé, lo que necesitaba lo conseguí perfectamente con esta linea en el .htaccess
El único problema que obtuve con esta forma es con el contenido estático, que siempre lo busco en /imgs/logo.png o /css/core.css, si yo hiciera esto buscaría el contenido estatico dentro de la aplicacion principal, si no comparto contenido lo mejor es usar urls absolutas apuntando por ejemplo a static.segundaApp.com, esta url la pueden obtener con un helper, $this->baseUrl() de ZF puede servir, no recuerdo si envia el dominio completo, pero en el caso que no pueden crear uno que resuelva este problema.


