zend-framework shared-hosting folder-structure

Zend Framework en alojamiento compartido



zend-framework shared-hosting (12)

Soy nuevo en Zend Framework. Me gustaría saber cómo implementar Zend Framework en un hosting compartido. Debido a la estructura de la carpeta Zend Framework, todos los archivos de vista se colocan en la carpeta "pública".

Suponer

"/" es la carpeta raíz principal para mí y el público es como "/ public"

para que la URL se convierta en " http: // site / public / ... bla bla ..."

¿es esto correcto?

o hay algun otro metodo?

No tengo ningún permiso para crear un host virtual.

¿Entonces lo que hay que hacer?

Espero que hayas entendido mi pregunta. Si no, por favor pregúntame.

¡Gracias!


Creo que la mejor manera es eliminar el .htaccess del directorio público (estructura de Zend Framework Directory) y ponerlo con el siguiente contenido en su directorio "raíz":

RewriteEngine On

RewriteRule ^.htaccess$ - [F] RewriteCond %{REQUEST_URI} ="" RewriteRule ^.*$ /public/index.php [NC,L]

RewriteCond %{REQUEST_URI} !^/public/.$ RewriteRule ^(.)$ /public/$1 RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^.*$ - [NC,L]

RewriteRule ^public/.*$ /public/index.php [NC,L]


De hecho, no es la mejor idea para ejecutar aplicaciones de Zend Framework en un alojamiento compartido. Realmente recomendaría obtener un alojamiento virtual privado (VPS). Hay hospedajes muy buenos y baratos con Zend Framework y otros marcos ya instalados y actualizados regularmente. ¡Estoy en servergrove y ha sido genial hasta ahora!

Pero esto no significa que no puedas hacer que funcione en un hosting compartido. Simplemente tiene que trabajar con .htacess. Coloque el contenido de la carpeta pública en su webroot y ajuste sus rutas en bootstrap.php, asegúrese de que no se pueda acceder directamente a todas las demás carpetas y use el enfoque ZF habitual para enrutar todo a través de su index.php.


Sugiero la más simple: desarrolle sus aplicaciones de forma que index.php esté en su raíz (incluso mejor, siempre defina PUBLIC_PATH - dirname(__FILE__); en su index.php y establezca enlaces relativos a esta constante). Junto con la aplicación y las carpetas de la biblioteca. Puede hacerlos fácilmente inaccesibles desde el exterior utilizando deny from all in .htaccess.

La constante PUBLIC_PATH también ayuda cuando su público no es público. (public html o / public html / www (en mi caso))


He estado en la misma situación y he puesto las bibliotecas de zend en una carpeta pública como ''src'' y uso un .htaccess Denegar de todo. Tendrás que hacer malabares con un par de rutas, pero funciona bien.


Incluya este archivo .htacces en su ruta base (es decir /../public):

RewriteEngine On # Exclude some directories from URI rewriting #RewriteRule ^(dir1|dir2|dir3) - [L] RewriteRule ^/.htaccess$ - [F] RewriteCond %{REQUEST_URI} ="" RewriteRule ^.*$ /public/index.php [NC,L] RewriteCond %{REQUEST_URI} !^/public/.*$ RewriteRule ^(.*)$ /public/$1 RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^.*$ - [NC,L] RewriteRule ^public/.*$ /public/index.php [NC,L]

Y deje el .htaccess que estaba bajo el directorio publc donde estaba.

Por lo tanto, tendrá 2 archivos .htaccess, uno en el directorio público (el ordinario de la documentación de Zend Framework) y el segundo en su ruta base (la que publiqué anteriormente).


. . . ¿Cómo Magento usa el framework Zend? Estoy usando XAMPP e instalé Magento localmente sin modificar php.ini, http.conf ni el host virtual.


Debe colocar la carpeta pública de su proyecto en la carpeta www en el host, por lo que su dirección se convertirá en sudominio.com/. La carpeta del código fuente, como la biblioteca, las aplicaciones ... debe colocarse en el mismo nivel que la carpeta www, no dentro de ella. Este método promoverá la seguridad de su sitio


La respuesta de ArneRie no funcionó para mí y finalmente terminé usando la solución de Lorenzo Albertons . Espero que esto ayude a otros a obtener una solución más rápida.

RewriteEngine On RewriteRule ^/.htaccess$ - [F] RewriteCond %{REQUEST_URI} ="" RewriteRule ^.*$ /public/index.php [NC,L] RewriteCond %{REQUEST_URI} !^/public/.*$ RewriteRule ^(.*)$ /public/$1 RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^.*$ - [NC,L] RewriteRule ^public/.*$ /public/index.php [NC,L]


En realidad, lo busqué y encontré muchas respuestas (la mayoría aquí en SO), pero ninguna de ellas me funcionó. Así que finalmente encontré una solución - .htaccess en el directorio raíz:

RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule !/.(js|ico|txt|gif|jpg|png|css)$ index.php

Esta de http://framework.zend.com/wiki/display/ZFDEV/Configuring+Your+URL+Rewriter e index.php en el directorio raíz:

<?php define(''RUNNING_FROM_ROOT'', true); include ''public/index.php''; ?>

Este de http://akrabat.com/zend-framework/zend-framework-on-a-shared-host/ Y funciona para mí, incluso si hay otro directorio de proyecto en la carpeta raíz, como en el foro o más. Pensé que podría ser útil para alguien :)


También Rob Allen escribió una buena solución

Estoy usando Zend Framework 2 y funcionó para mí. Alghough no he hecho la parte " Hacer referencia a los archivos que se enfrentan al público" desde el enlace de arriba.

Acabo de cambiar el código en mi layout.phtml desde:

$basePath = $this->basePath();

a:

$basePath = $this->basePath(); if (defined(''RUNNING_FROM_ROOT'')) { $basePath .= ''public/''; }


Me encontré con este problema recientemente y a través de este hilo pude encontrar una solución. Estoy usando zf2. Así que todo lo que tuve que hacer fue tener los archivos relacionados con zend en un directorio que podemos nombrar decir src . Este directorio residirá en el directorio público o raíz (como /www )

  1. Cree un archivo .htaccess en el directorio ''src'' y agregue la directiva Denegar de Todos.

  2. En el archivo de índice, cambie el directorio de trabajo a la carpeta src haciendo lo siguiente:

    define(''SRC_ROOT'', ''src''); chdir(SRC_ROOT);

... y eres bueno para ir!


La configuración del host virtual generalmente se realiza dentro de httpd.conf o extra / httpd-vhosts.conf. Si está utilizando httpd-vhosts.conf, asegúrese de que este archivo esté incluido en su archivo httpd.conf principal. Algunas distribuciones de Linux (por ejemplo, Ubuntu) incluyen Apache para que los archivos de configuración se almacenen en / etc / apache2 y creen un archivo por host virtual dentro de la carpeta / etc / apache2 / sites-enabled. En este caso, colocaría el bloque de host virtual a continuación en el archivo / etc / apache2 / sites-enabled / zf2-tutorial.

Asegúrese de que NameVirtualHost esté definido y configurado en "*: 80" o similar, y luego defina un host virtual en esta línea:

Setting up the virtual host is usually done within httpd.conf or extra/httpd-vhosts.conf. If you are using httpd-vhosts.conf, ensure that this file is included by your main httpd.conf file. Some Linux distributions (ex: Ubuntu) package Apache so that configuration files are stored in /etc/apache2 and create one file per virtual host inside folder /etc/apache2/sites-enabled. In this case, you would place the virtual host block below into the file /etc/apache2/sites-enabled/zf2-tutorial. Ensure that NameVirtualHost is defined and set to “*:80” or similar, and then define a virtual host along these lines: <VirtualHost *:80> ServerName zf2-tutorial.localhost DocumentRoot /path/to/zf2-tutorial/public SetEnv APPLICATION_ENV "development" <Directory /path/to/zf2-tutorial/public> DirectoryIndex index.php AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost> Make sure that you update your /etc/hosts or c:/windows/system32/drivers/etc/hosts file so that zf2-tutorial.localhost is mapped to 127.0.0.1.

Asegúrese de actualizar su archivo / etc / hosts o c: / windows / system32 / drivers / etc / hosts para que zf2-tutorial.localhost esté mapeado a 127.0.0.1.