Zend Framework на общем хостинге
Я новичок в Zend Framework. Я хотел бы знать, как реализовать zend framework на общем хостинге. Из-за структуры папок структуры zend
все файлы просмотра помещаются в "общедоступную" папку.
Предположим, что
"/" является основной корневой папкой для меня, а public - как
"/public"
чтобы URL-адрес стал " http://site/public/...bla bla..."
Правильно ли это?
или есть ли другой метод?
У меня нет разрешения на создание виртуального хоста.
так что делать?
Я надеюсь, что вы поняли мой вопрос. Если нет, пожалуйста, спросите меня.
Спасибо!
Ответы
Ответ 1
Я думаю, что лучший способ - удалить .htaccess из общего каталога (структура Directory Zend Framework) и поместить его в следующий каталог в корневой каталог:
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]
Ответ 2
Включите этот файл .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, который был в каталоге publc, где он был.
Таким образом, у вас будут файлы .htaccess, один под общим каталогом (обычный из документации Zend Framework) и второй под базовым путем (тот, который я опубликовал выше).
Ответ 3
Вы должны поместить свою общую папку проекта в папку www в хосте, так что ваш адрес станет вашим домом.
Ваша папка с исходным кодом, такая как библиотека, приложения... должна размещаться на одном уровне с папкой www, а не внутри нее. Этот метод будет способствовать безопасности вашего сайта.
Ответ 4
Действительно, это не лучший идеал для запуска приложений Zend Framework на общем хостинге. Я бы рекомендовал получить виртуальный частный хостинг (VPS). Есть очень хорошие и недорогие хостинги с Zend Framework и другими фреймворками, которые уже установлены и регулярно обновляются. Я нахожусь на servergrove, и это было замечательно до сих пор!
Но это не означает, что вы не можете заставить его работать на общем хостинге. Вам просто нужно скорее работать с .htacess. Поместите содержимое общей папки в свой веб-сайт и настройте свои пути в bootstrap.php, убедитесь, что все другие папки не могут быть доступны напрямую и использовать обычный ZF-подход для маршрутизации всего через index.php.
Ответ 5
Ответ от 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]
Ответ 6
На самом деле я искал его и нашел много ответов (большинство из них здесь на 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+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/
И он работает для меня, даже если в корневой папке есть другой файл проекта - например, форум.
Думал, что это может быть полезно кому-то:)
Ответ 7
Также Роб Аллен написал хорошее решение
Я использую Zend Framework 2, и это сработало для меня.
Alghough Я не сделал часть "Ссылка на общедоступные файлы" по ссылке выше.
Я только что изменил код в своем layout.phtml из:
$basePath = $this->basePath();
в
$basePath = $this->basePath();
if (defined('RUNNING_FROM_ROOT')) {
$basePath .= 'public/';
}
Ответ 8
Я был в той же ситуации и поместил библиотеки zend под общедоступной папкой, например 'src', и использовал .htaccess Deny from All. Вам придется манипулировать двумя путями, но он отлично работает.
Ответ 9
., Как Magento использует Zend framework??? Я использую XAMPP, и я установил Magento локально без изменения php.ini, http.conf и виртуального хоста.
Ответ 10
Недавно я столкнулся с этой проблемой, и через эту нить я смог найти решение. Я использую zf2. Так что все, что я должен был сделать, это иметь файлы, связанные с zend, в каталоге, который мы можем назвать src
. Этот каталог будет находиться в общедоступном или корневом каталоге (например, /www
)
-
Создайте файл .htaccess в каталоге 'src' и добавьте директиву Deny from All.
-
В индексном файле измените рабочий каталог на папку src
, выполнив следующие действия:
define('SRC_ROOT', 'src');
chdir(SRC_ROOT);
... и вам хорошо идти!
Ответ 11
Настройка виртуального хоста обычно выполняется в файле httpd.conf или extra/httpd-vhosts.conf. Если вы используете httpd-vhosts.conf, убедитесь, что этот файл включен в ваш основной файл httpd.conf. Некоторые дистрибутивы Linux (например: Ubuntu) Apache, так что файлы конфигурации хранятся в /etc/apache 2 и создают один файл на виртуальный хост внутри папки /etc/apache 2/sites-enabled. В этом случае вы разместите блок виртуального хоста ниже в файле /etc/apache 2/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.
Ответ 12
Я предлагаю самые простые: Разработайте свои приложения таким образом, чтобы index.php находился в вашем корне (еще лучше - всегда указывайте PUBLIC_PATH - dirname(__FILE__);
в вашем index.php и создавайте ссылки относительно этой константы). Наряду с папками приложений и библиотек. Вы можете легко сделать их недоступными извне, используя deny from all
в .htaccess.
Константа PUBLIC_PATH также помогает, когда ваша публика не является общедоступной. (public html или /public html/www (в моем случае))