2009-07-12 20 views
16

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

Supponiamo

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

modo che l'URL diventa "http://site/public/. .. .bla bla ..."

è corretto?

oppure esiste un altro metodo?

Non ho alcun permesso di creare un host virtuale.

quindi cosa fare?

Spero che abbiate compreso la mia domanda. Se no, per favore chiedimi.

Grazie!

risposta

12

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]

+0

hi - mi chiedo solo di poter individuare qualcosa di sbagliato con i dettagli che ho postato in fondo a questo thread? – emeraldjava

+0

Possibile domanda n00b: Che effetto avrà sul routing ZF? Cioè, il prefisso "/ public" non farà parte dell'URL che ZF vede (immagino tramite l'oggetto $ request)? Di conseguenza, ora tutti gli Rotte ZF devono essere "pubblici"? Sarebbe piuttosto indesiderabile, non sarebbe? –

+0

dove mettere le impostazioni dell'ambiente? – JellyBelly

1

In effetti non è la migliore idea per eseguire le applicazioni Zend Framework su un hosting condiviso. Consiglio vivamente di ottenere un hosting privato virtuale (VPS). Ci sono degli hostings molto buoni e poco costosi là fuori con Zend Framework e altri framework già installati e regolarmente aggiornati. Sono al numero servergrove ed è stato fantastico finora!

Ma questo non significa che non è possibile farlo funzionare su un hosting condiviso. Devi solo lavorare con .htacess. Metti il ​​contenuto della cartella pubblica nella tua webroot e modifica i tuoi percorsi nel bootstrap.php, assicurati che tutte le altre cartelle non possano accedere direttamente e usa il solito approccio ZF di routing di tutto tramite index.php.

+0

Dettagli sulla mia implementazione di questo approccio: http://bit.ly/btQGbh –

-1

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

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

0

Sono stato nella stessa situazione e ho messo le librerie di zend sotto una cartella in pubblico come 'src' - e uso un .htaccess Deny da Tutti. Dovrai destreggiarti tra un paio di percorsi, ma funziona bene.

10

Includere questo .htacces file con il tuo percorso di base (cioè /../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] 

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

Quindi avrai 2.file htaccess, uno sotto la directory pubblica (quello ordinario dalla documentazione di Zend Framework) e il secondo sotto il percorso di base (quello che ho postato sopra).

+0

ciao - mi chiedo solo se riesci a individuare qualcosa di sbagliato con i dettagli che ho postato in fondo a questo thread? – emeraldjava

+0

Ho provato questo, ma non trova altre directory, che collegano alla cartella dell'applicazione al di fuori della cartella pubblica. Altre semplici pagine funzionano – mrN

0

. . . Come Magento usa il framework Zend ??? Sto usando XAMPP e ho installato Magento localmente senza modificare php.ini, http.conf né virtual host.

2

È necessario posizionare la cartella pubblica del progetto nella cartella www nell'host, in modo che l'indirizzo diventi yourdomain.com/. La cartella del codice sorgente come libreria, applicazioni ... dovrebbe essere posta allo stesso livello della cartella www, non al suo interno. Questo metodo promuoverà la sicurezza del tuo sito

+0

Questa potrebbe essere la risposta più appropriata. – LoneWOLFs

1

La risposta di ArneRie non ha funzionato per me e alla fine ho finito con l'utilizzo di Lorenzo Albertons solution. Spero che questo aiuti gli altri a 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] 
1

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/Configuring+Your+URL+Rewriter e index.php on dir radice:

<?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 altre dir di progetto nella cartella radice - come forum o altro. pensato che potrebbe essere utile a qualcuno :)

1

anche Rob Allen wrote a good solution

che sto usando Zend Framework 2 e ha funzionato per me. Alghough I non ha fatto parte "Referencing public facing files" dal link precedente.

Ho codice appena cambiato nella mia layout.phtml da:

$basePath = $this->basePath(); 

a:

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

Хорошее решение. А вы не знаете как можно установить этот 'basePath' так, чтобы на всё приложение он был одинаковый? При таком решении придется в каждом виде, где есть вызов '$ this-> basePath()', прописывать этот код. А хотелось бы в одном месте где-то задать его и везде бы он был один и тот же. – Green

+0

Ciò richiederebbe la modifica di tutti i file phtml :(qualsiasi metodo più breve per una soluzione più veloce? – LoneWOLFs

0

ho incontrato questo problema recente e attraverso questa discussione mi è stato in grado di trovare una soluzione. Sto usando zf2. Quindi tutto ciò che dovevo fare era avere i file relativi a zend in una directory che possiamo chiamare "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, modificare la directory di lavoro alla cartella src effettuando le seguenti operazioni:

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

... e siete pronti per partire!

0

L'impostazione dell'host virtuale viene in genere eseguita in httpd.conf o in extra/httpd-vhosts.conf. Se stai usando httpd-vhosts.conf, assicurati che questo file sia incluso nel tuo file httpd.conf principale. Alcune distribuzioni Linux (es: Ubuntu) pacchetto Apache in modo che i file di configurazione siano memorizzati in/etc/apache2 e creino un file per host virtuale all'interno della cartella/etc/apache2/sites-enabled. In questo caso, posizionerai il blocco host virtuale sotto nel file/etc/apache2/sites-enabled/zf2-tutorial.

Assicurarsi che NameVirtualHost è definita e impostata su “*: 80” o simili, e quindi definire un host virtuale in queste righe:

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 vostro/etc/hosts o c: file \ windows \ system32 \ drivers \ etc \ hosts in modo che zf2-tutorial.localhost sia mappato su 127.0.0.1.

+0

In un hosting condiviso, DONT CANT EDIT e DONT CANT ADD un virtualhost. – marioquartz