全部, 我的PHP Zend MVC应用程序结构是这样的:
billingsystem
-application
-design
-public
--index.php
--.htaccess
-library
-- Zend
每当应用程序加载时,它都会转到公共文件夹中的index.php,然后从那里重新路由..我想确保用户通过http://billingsystem/访问系统而不是转到{{3} }。这是一个Zend约定来保留公用文件夹。或者我可以摆脱它并将文件移动到根目录?我尝试这样做,但我的应用程序失败了,因为它无法找到Zend库并加载它的类..我的一些index.php代码如下:
// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
get_include_path(),
)));
// Ensure include/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../include'),
get_include_path(),
)));
// Ensure application/models is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../application/models'),
get_include_path(),
)));
/** Zend_Application */
require_once 'Zend/Application.php';
require_once 'Zend/Loader.php';
//Autoload Zend Classes
Zend_Loader::loadClass('Zend_Loader_Autoloader');
Zend_Loader_Autoloader::getInstance()->setFallbackAutoloader(true);
由于
答案 0 :(得分:3)
ZF假设您将主机的文档根目录设置为公用文件夹。这基本上是因为您可以将应用程序代码放在“公共”空间之外。如果您使用的是apache服务器,则需要在httpd.conf(1.x)或apache2.conf(2.x)文件中修改DocumentRoot指令。您的服务器本身可以具有DocumentRoot,您还可以创建每个都具有DocumentRoot的VirtualHost。这是一个关于为您的网站设置虚拟主机的体面教程:http://apptools.com/phptools/virtualhost.php。在Zend wiki中也有一个很好的例子:http://framework.zend.com/wiki/display/ZFDEV/Configuring%2BYour%2BURL%2BRewriter
答案 1 :(得分:1)
Rob Allen解释了如何实现这一目标
http://akrabat.com/zend-framework/zend-framework-on-a-shared-host/
基本上,您保持项目结构不变。
使用以下
在/ public文件夹的同一级别创建index.php文件<?php
define('RUNNING_FROM_ROOT', true);
include 'public/index.php';
还可以使用此
在/ public文件夹的同一级别创建一个新的.htaccess文件SetEnv APPLICATION_ENV development
RewriteEngine On
RewriteRule .* index.php
然后你需要在你的应用程序中做一些关于如何引用静态内容的技巧。这特定于您自己的实现,请参阅Rob Allen提供的实现链接。
答案 2 :(得分:0)
修改强>
使用您的配置,您需要更改为以下内容:
// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/application'));
执行此操作后,您可以将公共内容移动到文档根目录,它应该可以正常工作。
请勿忘记/忽略非公共目录中.htaccess
个文件的部分。
那说使用我所描述的惯例真的会更好。坦率地说,如果您的主机不允许您在文档根id切换主机之外创建文件。
通常,惯例是public
文件夹 文档根目录,而所有其他文件夹都在文档根目录之外。因此http://billingsystem.com应通过虚拟主机或默认主机配置映射到path/to/project/public
。在文档根目录中包含所有内容并不是一个好主意。如果您确实将所有内容放在文档根目录中,因为您没有访问它,那么您需要更改配置:
APPLICATION_PATH
应为realpath(dirname(__FILE__).'/application')
;
然后,您要确保删除.htaccess
,library
和application
拒绝所有网络访问权限的tests
。
答案 3 :(得分:0)
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
只需将此路径更改为
即可defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/application'));
并将index.php和.htaccess文件移动到根文件夹中。