我在本地服务器(ubuntu)上部署了一个zend应用程序,默认页面工作正常,但应用程序的其余部分都会抛出404未找到的页面。
我的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();
的application.ini
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.params.displayExceptions = 0
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules = ""
resources.frontController.params.prefixDefaultModule = "1"
resources.db.adapter = mysqli
resources.db.params.host = localhost
resources.db.params.username = root
resources.db.params.password = ""
resources.db.params.dbname = assalam
[staging : production]
[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1
Bootsrap文件中的_initAutoLoader函数
protected function _initAutoLoad(){
$modelLoader = new Zend_Application_Module_Autoloader(array(
'namespace'=>'',
'basePath'=>APPLICATION_PATH . '/modules/default'
));
if(Zend_Auth::getInstance()->hasIdentity()){
Zend_Registry::set('role',Zend_Auth::getInstance()->getStorage()->read()->role);
}else {
Zend_Registry::set('role','Visiteurs');
}
$this->_acl = new Model_UsersAcls();
$this->_auth = Zend_Auth::getInstance();
$fc = Zend_Controller_Front::getInstance();
$fc->registerPlugin(new Plugin_AccessCheck($this->_acl));
return $modelLoader;
}
apache2.conf包含
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
htaccess文件包含
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
RewriteRule ^(.*)$ - [E=BASE:%1]
RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L]
虚拟主机代码
<VirtualHost *:80>
ServerName localhost
DocumentRoot /var/www/
<Directory /var/www/>
Options +FollowSymlinks +SymLinksIfOwnerMatch
AllowOverride All
</Directory>
</VirtualHost>
答案 0 :(得分:0)
你是如何部署它的?您使用过Zend Server部署?你有设置虚拟主机吗?你打电话给什么网址?什么是项目路径?
答案 1 :(得分:0)
您是否设置了htaccess文件?
您的服务器是否允许运行htaccess文件(请检查服务器配置文件中的AllowOverride是否设置为All。)
举个例子,这是我的一个项目的htaccess文件:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^(.*)/(.*)$ index.php [NC,L]
RewriteRule ^(.*)/(.*)/(.*)$ index.php [NC,L]
RewriteRule ^(.*)/(.*)/(.*)/(.*)$ index.php [NC,L]
RewriteRule ^.*$ index.php [NC,L]
RewriteCond %{REQUEST_FILENAME} !^(.*)\.css$
RewriteCond %{REQUEST_FILENAME} !^(.*)\.js$
RewriteCond %{REQUEST_FILENAME} !public/gateway/(.*)$
RewriteRule ^.*$ - [NC,L]
答案 2 :(得分:0)
请检查您是否有虚拟主机,如果没有创建类似这样的示例:
<VirtualHost *:80>
ServerName helloWorld.dev
DocumentRoot /Users/myuser/Sites/HelloWorld/public
<Directory /Users/myuser/Sites/HelloWorld/public>
Options +FollowSymlinks +SymLinksIfOwnerMatch
AllowOverride All
</Directory>
</VirtualHost>
同样在您的主机文件
上127.0.0.1 helloWorld.dev
我建议也要检查文件夹权限
myuser:HelloWorld myuser$ ll
total 0
drwxr-xr-x 8 myuser staff 272B Jan 6 11:54 application
drwxr-xr-x 3 myuser staff 102B Jan 6 11:54 docs
drwxr-xr-x 4 myuser staff 136B Dec 28 20:54 library
drwxr-xr-x 4 myuser staff 136B Jan 6 11:54 public
drwxr-xr-x 6 myuser staff 204B Jan 6 11:54 tests
myuser:HelloWorld myuser$ pwd
/Users/myuser/Sites/HelloWorld
myuser:HelloWorld myuser$
在文件/etc/apache2/users/myuser.conf中添加以下定义。如果此文件不存在,请创建
<Directory "/Users/myuser/Sites/">
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>