Recientemente he subido mi primer proyecto realizado integramente en Zend Framework 2 con Skeleton Application a un servicio de hosting virtual a 1&1 (1and1) y encontré algunas pequeñas dificultades que me gustaría compartir.
Si bien no significaron mas que una pequeña demora en poner en marcha el servicio (poco más de una hora) me parece interesante comentarlo por si alguien quiere subir un proyecto en ZF2 a este servicio u otro y encuentre problemas similares. Tengo que decir que el servicio de hosting y el proyecto funcionan de maravilla. 😉
Cambiar el DocumentRoot del servicio a /public
Esto es fundamental y de hecho si has desarrollado en casi cualquier framework debes de recordar que el servicio web debes de configurarlo para que el raíz del servicio sea /public
(o el correspondiente según el framework) y no el raíz. Obviamente has tenido que hacer lo mismo en tu desarrollo local. En 1&1 si tienes que cambiar el directorio raíz del servicio recuerda que desde que validas el cambio en el área de administración y que dicho cambio surta efecto transcurren 10 minutos, así que no lo dejéis para el último momento o configuradlo mientras subís el proyecto por FTP.
Error 500 al hacer click en los enlaces internos
Una vez subido tu proyecto cargas tu página principal pero los enlaces internos no se resuelven correctamente y te da un Error 500. La solución es añadir la siguiente linea en el .htaccess
del directorio /public
de nuestro proyecto:
RewriteBase / |
Si utilizas el .htaccess
de SkeletonApplication queda del siguiente modo:
RewriteEngine On # IMPORTANT to work on 1and1 RewriteBase / # The following rule tells Apache # that if the requested filename # exists, simply serve it. RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] # The following rewrites all other # queries to index.php. The # condition ensures that if you are # using Apache aliases to do # mass virtual hosting, the base # path will be prepended to # allow proper resolution of the # index.php file; it will work # in non-aliased environments as well, # providing a safe, one-size # fits all solution. RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::2$ RewriteRule ^(.*) - [E=BASE:%1] RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L] |
Este error tuve que investigarlo un poco más y de hecho no es sólo con ZF2. Por distintos comentarios que he leido por foros es muy frecuente con CMS como Drupal, WordPress, etc.
El servicio de 1&1 no permite tráfico por el puerto 25 desde el propio hosting
Este ya fue más curioso. Por distintas características del proyecto utilizaba para el envío de Emails en la aplicación como Transporte SMTP y no Sendmail ZF2 Mail Transport, por lo que tenía que establecer una conexión por el puerto 25. Sin embargo no era posible. Aunque el código funcionaba correctamente en mi servidor de desarrollo enviando emails por SMTP contra el propio servidor de 1&1, una vez subido devolvía un error de timeout.
Al parecer 1&1 restringe envío de correos por SMTP desde sus propios servidores de hosting, por lo que tienes que utilizar Sendmail.
Espero que sea de ayuda si alguien sube algún proyecto de Zend Framework 2 a 1&1. He de decir que por lo demás que la aplicación corre perfectamente y no hemos tenido ningún problema.
Autor:
Última actualización:
Oye amigo una pregunta:
como cambio el DocumentRoot?
soy muy nob 😀
Si lo que quieres es cambiar el DocumentRoot en Apache para ZF2 lo que deberás de tener es configurado el site con la siguiente línea:
DocumentRoot /var/www/directorio-proyecto/public
Pero eso lo puedes hacer también en el panel de tu hosting apuntando el directorio a servir con el directorio
/public
al final.Hola estoy trabajando un proyecto en zend pero tengo un problema similar al que mencionaste anteriormente… mi proyecto me funciona bien de manera local pero cuando lo subo a un hosting no funcionan lo enlaces internos…
siempre que quiero ir a otro enlace se redirecciona al mismo sitio que puedo hacer. de antemano muchas gracias…
Si no te funciona incluyendo esta línea en tu .htaccess
RewriteBase /
comprueba que tu hosting tenga activado el módulo rewrite de Apache. Si aún así no te funciona abre un ticket con tu hosting. Suerte.
Salvavidas ….muchas gracias!!!!!!
Me alegro de que te haya servido de ayuda. 😉