Подтвердить что ты не робот

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

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

Предположим, что

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

чтобы URL-адрес стал " http://site/public/...bla bla..."

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

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

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

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

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

Спасибо!

4b9b3361

Ответ 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 (в моем случае))