Domanda

Sono nuovo in Zend Framework.Vorrei sapere come implementare il framework zend su un hosting condiviso.A causa della struttura della cartella Framework Zend, tutti i file di visualizzazione vengono inseriti nella cartella "pubblica".

Supponiamo

"/" è la cartella principale per me e il pubblico è come "/pubblico"

in modo che l'URL diventi "http://sito/pubblico/....bla bla..."

è corretto?

o c'è qualche altro metodo?

non ho alcuna autorizzazione per creare un host virtuale.

quindi che si fa?

Spero che tu abbia capito la mia domanda.In caso contrario, chiedimelo.

Grazie!

È stato utile?

Soluzione

Penso che il modo migliore è quello di rimuovere il file .htaccess dalla directory pubblica (struttura Zend Framework Directory), e metterlo con il seguente contenuto nella directory "root":

 
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]

Altri suggerimenti

Includere questo .htacces file con il tuo percorso di base (cioè /../ pubblico):

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]

E lasciare il .htaccess che era sotto la directory publc dov'era.

Così si avrà 2 file .htaccess, uno sotto la directory pubblica (l'ordinario uno dalla documentazione Zend Framework) e seconda sotto il vostro percorso di base (quella che ho postato sopra).

Si consiglia di posizionare la cartella Public di progetto nella cartella www nell'ospite, così il vostro indirizzo diventerà yourdomain.com/. La cartella del codice sorgente, come biblioteca, applicazioni ... dovrebbe essere posto allo stesso livello con la cartella www, non all'interno di esso. Questo metodo promuoverà la sicurezza del tuo sito

In realtà non è la migliore idead per eseguire le applicazioni Zend Framework su un hosting condiviso. Consiglio davvero ottenere un hosting virtuale privato (VPS). Ci sono hostings molto buono e poco costoso là fuori con Zend Framework e di altri quadri già installati e regolarmente aggiornati. Sono su servergrove ed è stato grande fino ad ora!

Ma questo non significa che non è possibile farlo funzionare su un hosting condiviso. Devi solo lavorare piuttosto con .htacess. Mettere il contenuto della cartella pubblica nella vostra Webroot e regolare i percorsi nel bootstrap.php, assicurarsi che tutte le altre cartelle non possono essere accede direttamente e utilizzare il consueto approccio ZF di instradare tutto attraverso il vostro index.php.

La risposta da ArneRie non ha funzionato per me e finalmente ho finito per usare Lorenzo Albertsons soluzione . Spero che questo è aiutare gli altri per ottenere una soluzione più veloce.

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]

In realtà ho cercato e trovato un sacco di risposte (la maggior parte di loro qui su SO), ma nessuno di loro ha lavorato per me. Così ho finalmente trovato una soluzione - .htaccess sulla directory di root:

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

Questo uno da http://framework.zend.com / wiki / display / ZFDEV / Configurazione + Your + URL + Masterizzatore e index.php on dir root:

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

Questo uno da http://akrabat.com/ zend-framework / zend-framework-on-a-shared-host / E funziona per me anche se ci sono altri progetti dir nella cartella principale - forum come o giù di lì. Pensato che potrebbe essere utile a qualcuno:)

Rob Allen ha scritto una buona soluzione

sto usando Zend Framework 2 e ha funzionato per me. Alghough Non ho fatto parte "Riferimento pubblica di fronte a file" dal link qui sopra.

I Codice appena cambiato nel mio layout.phtml da:

$basePath = $this->basePath();

a:

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

Sono stato nella stessa situazione e hanno messo le librerie Zend in una cartella sotto pubblico come 'src' - e utilizzare un .htaccess Nega Da Tutti. Dovrete manipolare un paio di sentieri, ma funziona bene.

. . . Come Magento usa Zend Framework ??? Sto usando XAMPP e ho installato Magento localmente senza modificare php.ini, http.conf nè host virtuale.

ho incontrato questo problema recente e attraverso questa discussione mi è stato in grado di trovare una soluzione. Sto usando ZF2. Quindi, tutto quello che dovevo fare era avere i file correlati Zend in una directory possiamo chiamare dire src. Questa directory risiederà nella directory pubblica o root (come /www)

  1. Creare un file .htaccess nella directory 'src' e aggiungere il Nega da All direttiva.

  2. Nel file di indice, cambiare la directory di lavoro alla cartella src nel modo seguente:

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

... e siete pronti per partire!

Configurazione del host virtuale di solito è fatto all'interno di httpd.conf o / httpd-vhosts.conf supplementare. Se si utilizza httpd-vhosts.conf, assicurarsi che questo file è incluso dal file httpd.conf principale. Alcune distribuzioni di Linux (es: Ubuntu) pacchetto Apache in modo che i file di configurazione sono memorizzati in / etc / apache2 e creare un file per ogni host virtuale all'interno / etc / apache2 / sites-enabled cartella. In questo caso, si dovrebbe posizionare il blocco host virtuale sotto nel file / etc / apache2 / sites-enabled / ZF2 dimostrativi.

Assicurarsi che NameVirtualHost è definito e impostato su “*: 80” o simili, e quindi definire un host virtuale lungo queste linee:

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.

Assicurati di aggiornare il tuo / etc / hosts o C:. \ Windows \ system32 \ drivers \ etc \ hosts file in modo che ZF2-tutorial.localhost è mappato 127.0.0.1

Ti suggerisco il più semplice:Sviluppa le tue app in modo che index.php sia nella tua root (ancora meglio - definisci sempre PUBLIC_PATH - dirname(__FILE__); nel tuo index.php e crea collegamenti relativi a questa costante).Insieme alle cartelle dell'applicazione e della libreria.Puoi facilmente renderli inaccessibili dall'esterno utilizzando deny from all nel file .htaccess.

La costante PUBLIC_PATH aiuta anche quando il tuo pubblico non è pubblico.(public html o /public html/www (nel mio caso))

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top