404部署zend应用程序之后

时间:2014-01-06 17:45:00

标签: php zend-framework deployment frameworks

我在本地服务器(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>

3 个答案:

答案 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>