Zend Framework на виртуальном хостинге - PullRequest
16 голосов
/ 12 июля 2009

Я новичок в Zend Framework. Я хотел бы знать, как реализовать Zend Framework на виртуальном хостинге. Из-за структуры папки Zend Framework все файлы представлений помещаются в общую папку.

Пусть

"/" - это основная корневая папка для меня, а public "/ public"

так что URL становится "http://site/public/. .. .bla bla ..."

это правильно?

или есть другой способ?

У меня нет разрешения на создание виртуального хоста.

ну и что делать?

Я надеюсь, что вы поняли мой вопрос. Если нет, пожалуйста, спросите меня.

Спасибо!

Ответы [ 12 ]

12 голосов
/ 12 июля 2009

Я думаю, что лучший способ - удалить .htaccess из общедоступного каталога (структура каталога Zend Framework) и поместить его со следующим содержимым в ваш «корневой» каталог:

 <code>
RewriteEngine On</p>

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

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

<p>RewriteRule ^public/.*$ /public/index.php [NC,L]
11 голосов
/ 18 июля 2009

Включите этот файл .htacces под своим базовым путем (то есть /../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]

И оставьте .htaccess, который был в каталоге pubc, где он был.

Таким образом, у вас будет 2 файла .htaccess, один в общедоступном каталоге (обычный из документации Zend Framework) и второй в вашем базовом пути (тот, который я выложил выше).

2 голосов
/ 15 декабря 2009

Вы должны поместить папку Public вашего проекта в папку www на хосте, чтобы ваш адрес стал yourdomain.com/. Ваша папка с исходным кодом, такая как библиотека, приложения ... должна находиться на одном уровне с папкой www, а не внутри нее. Этот метод будет способствовать безопасности вашего сайта

1 голос
/ 27 июня 2012

Также Роб Аллен написал хорошее решение

Я использую Zend Framework 2 , и он работал для меня. Хотя я не выполнил часть «Ссылки на общедоступные файлы» по ссылке выше.

Я только что изменил код в layout.phtml с:

$basePath = $this->basePath();

до:

$basePath = $this->basePath();
if (defined('RUNNING_FROM_ROOT')) {
    $basePath .= 'public/';
}
1 голос
/ 16 февраля 2012

На самом деле я искал его и нашел много ответов (большинство из них здесь, на SO), но ни один из них не помог мне. Итак, я наконец нашел решение - .htaccess для root dir:

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

Это из http://framework.zend.com/wiki/display/ZFDEV/Configuring+Your+URL+Rewriter и index.php в корневом каталоге:

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

Это из http://akrabat.com/zend-framework/zend-framework-on-a-shared-host/ И это работает для меня, даже если в корневой папке есть другой каталог проекта - например, форум или около того. Думал, что это может быть кому-то полезно:)

1 голос
/ 26 ноября 2010

Ответ от ArneRie у меня не сработал, и я наконец-то выбрал раствор Лоренцо Альбертона . Надеюсь, это поможет другим быстрее найти решение.

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 голос
/ 12 июля 2009

Действительно, это не лучшая идея для запуска приложений Zend Framework на виртуальном хостинге. Я очень рекомендую получить виртуальный частный хостинг (VPS). Есть очень хорошие и недорогие хостинги с Zend Framework и другими фреймворками, которые уже установлены и регулярно обновляются. Я на servergrove , и до сих пор это было здорово!

Но это не значит, что вы не можете заставить его работать на виртуальном хостинге. Вы просто должны работать с .htacess. Поместите содержимое общей папки в ваш webroot и настройте пути в bootstrap.php, убедитесь, что все другие папки не могут быть доступны напрямую, и используйте обычный подход ZF для маршрутизации всего через ваш index.php.

0 голосов
/ 29 октября 2015

Настройка виртуального хоста обычно выполняется в httpd.conf или extra / httpd-vhosts.conf. Если вы используете httpd-vhosts.conf, убедитесь, что этот файл включен в ваш основной файл httpd.conf. Некоторые дистрибутивы Linux (например, Ubuntu) содержат пакет Apache, поэтому файлы конфигурации хранятся в / etc / apache2 и создают один файл для каждого виртуального хоста в папке / etc / apache2 / sites-enabled. В этом случае вы поместите блок виртуального хоста ниже в файл /etc/apache2/sites-enabled/zf2-tutorial.

Убедитесь, что NameVirtualHost определен и имеет значение «*: 80» или подобное, а затем определите виртуальный хост по следующим линиям:

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.

Убедитесь, что вы обновили файл / etc / hosts или c: \ windows \ system32 \ drivers \ etc \ hosts, чтобы zf2-tutorial.localhost был сопоставлен с 127.0.0.1.

0 голосов
/ 05 сентября 2013

Я недавно столкнулся с этой проблемой, и благодаря этой теме я смог найти решение. Я использую zf2. Так что все, что мне нужно было сделать, - это иметь связанные с Zend файлы в каталоге, который мы можем назвать, скажем, src. Этот каталог будет находиться в общем или корневом каталоге (например, /www)

  1. Создайте файл .htaccess в каталоге 'src' и добавьте директиву Запретить из всех.

  2. В файле индекса измените рабочий каталог на папку src, выполнив следующие действия:

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

... и тебе пора!

0 голосов
/ 13 августа 2009

. , , Как Magento использует Zend Framework ??? Я использую XAMPP, и я установил Magento локально, без изменения php.ini, http.conf или виртуального хоста.

...