Pergunta

Eu sou novo para o Zend Framework. Eu gostaria de saber como implementar Zend Framework em uma hospedagem compartilhada. Por causa da estrutura da pasta Zend Framework todos os arquivos de visão são colocados na pasta "pública".

Suponha

"/" é a pasta raiz principal para mim e pública é como "/ Public"

para que a url se torna " http:. // site / público / .. .bla bla ... "

isso é correto?

ou existe algum outro método?

Eu não tenho nenhuma permissão para criar uma máquina virtual.

então o que fazer?

Espero que você entendeu minha pergunta. Se não, por favor me perguntar.

Obrigado!

Foi útil?

Solução

eu acho que a melhor maneira é remover o .htaccess do diretório público (estrutura Diretório Zend Framework), e colocá-lo com o seguinte conteúdo em seu diretório "raiz":

 
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]

Outras dicas

Integrar este Htacces sob seu caminho de base (que é /../ público):

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 deixar o .htaccess que estava sob o diretório publc onde estava.

Assim você terá 2 arquivos .htaccess, um sob o diretório público (aquele ordinária da documentação Zend Framework) e segunda sob o seu caminho de base (o que eu postei acima).

Você deve colocar pasta Público do seu projeto para a pasta www no hospedeiro, para que o seu endereço se tornará yourdomain.com/. Seu código fonte pasta, como biblioteca, aplicações ... deve ser lugar no mesmo nível com a pasta www, não dentro dela. Este método irá promover a segurança do seu site

Na verdade, não é a melhor idead para executar aplicações Zend Framework em um hospedagem compartilhada. Eu realmente recomendo recebendo uma hospedagem virtual privado (VPS). Há muito bons e baratos hostings lá fora, com Zend Framework e outras estruturas já instalados e atualizados regularmente. Estou na servergrove e tem sido muito bem até agora!

Mas isso não significa que você não pode fazê-lo funcionar em uma hospedagem compartilhada. Você apenas tem que prefere trabalhar com .htacess. Coloque o conteúdo da pasta pública em seu webroot e ajustar seus caminhos no bootstrap.php, certifique-se de todas as outras pastas não pode ser acessa diretamente e usar a abordagem usual ZF de roteamento tudo através de seu index.php.

A resposta de ArneRie não funcionou para mim e eu finalmente acabou usando Lorenzo Albertsons . Espero que este é ajudar os outros para obter uma solução mais 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]

Na verdade, eu procurei por ele e encontrou um monte de respostas (a maioria deles aqui no SO), mas nenhum deles funcionou para mim. Então, eu finalmente encontrei uma solução - .htaccess no diretório raiz:

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

Este de http://framework.zend.com / wiki / display / ZFDEV / Configuração + seu + URL + Rewriter e index.php no diretório raiz:

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

Este de http://akrabat.com/ zend-framework / zend-framework-on-a-shared-host / E ele trabalha para mim mesmo que haja outra dir projeto na pasta raiz - como fórum ou assim. Pensei que poderia ser útil para alguém:)

Rob Allen escreveu uma boa solução

Eu estou usando Zend Framework 2 e funcionou para mim. Alghough eu não fiz parte "Referenciando arquivos público enfrenta" do link acima.

Eu só mudou código na minha layout.phtml a partir de:

$basePath = $this->basePath();

para:

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

Eu estive na mesma situação e ter colocado as bibliotecas Zend sob uma pasta em público como 'src' - e usar um .htaccess Negar de todos. Você vai ter que fazer malabarismos um par de caminhos, mas ele funciona bem.

. . . Como Magento usa Zend Framework ??? Estou usando XAMPP e eu fiz instalar Magento localmente sem modificar php.ini, http.conf nem host virtual.

Eu encontrei este problema recentemente e através esta discussão eu era capaz de encontrar uma solução. Eu estou usando ZF2. Então, tudo que eu tinha a fazer era ter arquivos relacionados Zend em um diretório podemos citar digamos src. Este diretório irá residir no diretório público ou raiz (como /www)

  1. Crie um arquivo .htaccess no 'src' dir e adicione o Negar Todos directiva.

  2. No arquivo índice, alterar o diretório de trabalho para a pasta src fazendo o seguinte:

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

... e você é bom para ir!

Configuração do host virtual é geralmente feito dentro httpd.conf ou de cama / httpd-vhosts.conf. Se você estiver usando httpd-vhosts.conf, garantir que este arquivo é incluído pelo seu arquivo httpd.conf principal. Algumas distribuições Linux (ex: Ubuntu) pacote Apache para que os arquivos de configuração são armazenados em / etc / apache2 e criar um arquivo por host virtual dentro da pasta / etc / apache2 / sites-enabled. Neste caso, você iria colocar o bloco host virtual abaixo no arquivo / etc / apache2 / sites-enabled / ZF2-tutorial.

Assegurar que NameVirtualHost é definido e definido como “*: 80” ou semelhante, e, em seguida, definir uma máquina virtual ao longo destas linhas:

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.

Certifique-se de que você atualize seu arquivo / etc / hosts ou c:. \ Windows \ System32 \ drivers de arquivo \ etc \ hosts para que ZF2-tutorial.localhost é mapeado para 127.0.0.1

Eu sugiro o simpliest: Desenvolver seus aplicativos de uma forma onde index.php está na sua raiz (ainda melhor - sempre definir PUBLIC_PATH - dirname(__FILE__); em seus index.php e fazer ligações em relação a este constante). Junto com o aplicativo e pastas da biblioteca. Você pode facilmente torná-los inacessíveis a partir do exterior usando deny from all no .htaccess.

A constante PUBLIC_PATH também ajuda quando o seu público não é público. (Html ??público ou público / html / www (no meu caso))

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top