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
)
создать .файл htaccess в директории ' src ' и добавьте директиву Deny from All.
-
в индексном файле измените рабочий каталог на
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 (в моем случае))