Изменить расположение общей папки в проекте Zend_Framework? - PullRequest
6 голосов
/ 22 апреля 2011

Я хочу, чтобы моя папка public_html на моем сервере была публичной папкой в ​​моем Zend-проекте.Ребята, вы знаете, как я могу это сделать?Прямо сейчас я должен просмотреть свой сайт с domain.com/public

Я попытался изменить файл index.php на этот (изменил каталоги)

// Define path to application directory
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . 'application'));

// Define application environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . 'library'),
    get_include_path(),
)));

/** Zend_Application */
require_once 'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
            ->run();

Но это не работает,Любая идея, как я могу это исправить?

В основном я хочу структуру каталогов, как это:

public_html/
----application/
----library/
----index.php

Или есть какой-то другой способ добиться этого?В любом случае, я хочу, чтобы с моего URL исчезла публикация.

Есть идеи?

Ответы [ 3 ]

3 голосов
/ 25 апреля 2011

Если ваш .htaccess настроен правильно, вам не нужно беспокоиться о людях, попадающих в вашу папку библиотеки, простые правила перезаписи могут предотвратить это.

Ниже приведено то, что я использовал, чтобы избавиться от публичного каталога в моем index.php

$path = realpath(dirname(__FILE__));
$dirs = array(
        $path . '/library',
        get_include_path()
);
$includes = implode(PATH_SEPARATOR, $dirs);
set_include_path($includes);

defined('APPLICATION_PATH')
        || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/application'));

defined('APPLICATION_ENV')
        || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));

require_once 'Zend/Application.php';

$application = new Zend_Application(
                APPLICATION_ENV,
                APPLICATION_PATH . '/configs/application.ini'
);

а это мой .htaccess

<IfModule mod_rewrite.c>
Options +FollowSymLinks
Options -Indexes
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [L]

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d

RewriteRule ^.*$ - [NC,L]
RewriteRule \.svn/.* index.php [L]
RewriteRule ^.*$ index.php [NC,L]
</IfModule>
2 голосов
/ 22 апреля 2011

Это неправильный подход!Причина, по которой у нас есть общая папка и почти все остальное на одном уровне, является причиной безопасности!Мы не хотим, чтобы наши библиотеки и код приложения находились в нашей общей папке!

Единственное, что вам нужно изменить, - это конфигурация вашего сервера (apache) vhost, чтобы он указывал на вашу общую папку в качестве корня документа.

<VirtualHost *:80>
DocumentRoot /path/to/your/public/folder
ServerName domain.com
    <Directory path/to/your/public/folder>
        AllowOverride All
    </Directory>
</VirtualHost>
0 голосов
/ 23 апреля 2011

Этот пост предлагает один довольно простой подход (по сути, удалите public и поместите все файлы ZF в подпапку), но он также ссылается на несколько других подходов.

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

RewriteEngine on
RewriteRule ^.* /public/$0 [L]

Затем в папке public сохраняется стандарт .htaccess. В худшем случае вы также должны установить baseUrl приложения во время Bootstrap, возможно, через config.

...