Zend Framework:在此服务器上找不到请求的URL / my / path

时间:2011-12-04 11:00:02

标签: php zend-framework url-routing

我是Zend Framework的新手。

我编写了一个简单的Web服务,它使用Zend Framework返回模拟XML数据,模块结构如下:

AppName
    application
        configs
            application.ini
        modules
            default
                .....
            api
                controller
                    CatalogController.php
                view
        library
        public
            .htaccess
            index.php
        tests

在localhost(Windows 7)中,这些正在运行:

http://localhost

http://localhost/api/catalog

http://localhost/default

在我的生产服务器(linux)中,我从'

获得'未找到404文件'

http://107.22.255.126/api/catalog

http://107.22.255.126/default

但这是有效的

http://107.22.255.126

我在亚马逊网络服务中托管它。

这是我的.htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

这是我的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.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules[] = "default"
resources.modules[] = "api"
resources.layout.layoutPath = APPLICATION_PATH "/layouts"
resources.layout.layout = master

[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

这是我的Bootstrap.php

<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

    protected function _initRoutes()
    {
        $front = Zend_Controller_Front::getInstance();
        $router = $front->getRouter();
        $restRoute = new Zend_Rest_Route($front, array(), array('api'));
        $router->addRoute('api', $restRoute);
    }

}

?>

我已经没想完了。我怀疑这与bootstraper中的路由器有关,但无法找到任何解决方案。

3 个答案:

答案 0 :(得分:15)

最后,问题是因为httpd.conf禁用了目录上的.htaccess。我在VirtualHost下添加了AllowOverride All,它可以正常工作。

像这样:

<VirtualHost *:80>
    DocumentRoot "var/www/html/TestMVC/public"

    <Directory "var/www/html/TestMVC/public">
       Options Indexes MultiViews FollowSymLinks
       AllowOverride All
       Order allow,deny
       Allow from all
   </Directory>

</VirtualHost>

在问题的评论中归功于@Corbin。

答案 1 :(得分:4)

我在Ubuntu上遇到过这种问题。 我去了apache2.conf并设置了一个目录如下:

<Directory /var/www/>
  Options Indexes FollowSymLinks
  AllowOverride All
  Require all granted
</Directory>

最重要的一点是:AllowOverride All

请记住设置您的apache配置: sudo a2enmod重写

然后应该工作。

答案 2 :(得分:1)

解决方案是:: http://www.phpcloud.com/help/adding-rewrite-rules-to-your-application

在第3步中,我没有提及,但我们没有将默认的Elefant .htaccess文件复制到我们的公共文件夹中。相反,我们将在PHPCloud文档中使用Zend提供的那个。使用以下内容创建public / .htaccess文件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteBase /
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
php_flag zend_codetracing.trace_enable on
php_flag zend_codetracing.always_dump on