Zend Framework на общем хостинге

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

предположим

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

Так что url становится "http://site/public/. .. .бла бла..."

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

или есть какие-то другие метод?

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

Так что делать?

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

спасибо!

12 ответов


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

 
RewriteEngine On

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

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

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


включить это .файл 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/

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L]

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

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

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


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


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

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


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

RewriteEngine On

RewriteRule ^\.htaccess$ - [F]

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

RewriteCond %{REQUEST_URI} !^/public/.*$
RewriteRule ^(.*)$ /public/

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L]

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

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

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+Ваш + URL+Rewriter и индекс.php на root dir:

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

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


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

Я использую Zend Framework 2 и это сработало для меня. Alghough я не сделала часть "ссылки на общедоступные файлы" сверху ссылка.

Я только что изменил код в моем макет.phtml, который from:

$basePath = $this->basePath();

в:

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

Я был в той же ситуации и поместил библиотеки zend в папку под public как " src " - и использовать .htaccess отрицают от всех. Вам придется жонглировать парой путей, но это прекрасно работает.


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


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

  1. создать .файл htaccess в директории ' src ' и добавьте директиву Deny from All.

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

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

...и вы готовы идти!


настройка виртуального хоста обычно выполняется в httpd.conf или extra / httpd-vhosts.conf. Если вы используете httpd-vhosts.conf, убедитесь, что этот файл включен вашим основным httpd.файл conf. Некоторые дистрибутивы Linux (например, Ubuntu) пакет Apache, так что файлы конфигурации хранятся в /etc/apache2 и создать один файл на виртуальный хост внутри папки /etc/apache2/сайты-включен. В этом случае вы разместите блок виртуального хоста ниже в файле / etc/apache2/сайты с поддержкой / 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-учебник.localhost сопоставляется с 127.0.0.1.


Я предлагаю самое простое: разрабатывайте свои приложения таким образом, где индекс.php находится в вашем корне (еще лучше-всегда определяйте PUBLIC_PATH -dirname(__FILE__); в свой индекс.php и сделать ссылки относительно этой константы). Вместе с папками приложения и библиотеки. Вы можете легко сделать их недоступными извне, используя deny from all in .реврайт.

константа PUBLIC_PATH также помогает, когда ваша публика не является публичной. (public html или / public html / www (в моем случае))