Zend Framework: Запрошенный URL / my / path не был найден на этом сервере - PullRequest
8 голосов
/ 04 декабря 2011

Я новичок в Zend Framework.

Я написал простой веб-сервис, который возвращает ложные данные XML с Zend Framework, с такой структурой модуля:

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

In 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

Я размещаю его в Amazon Web Services.

Вот мой .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 ]

16 голосов
/ 04 декабря 2011

Наконец, проблема в том, что httpd.conf отключает .htaccess для каталога. Я добавил AllowOverride All к нему под VirtualHost, и он работает.

как это:

<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 в комментарии к вопросу.

4 голосов
/ 06 марта 2016

У меня была такая проблема в Ubuntu. Я пошел в apache2.conf и установил один каталог, как показано ниже:

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

Самый важный момент: AllowOverride All

Не забудьте установить конфигурацию Apache: sudo a2enmod переписать

Тогда это должно работать.

1 голос
/ 07 декабря 2012

Да, решения: :: http://www.phpcloud.com/help/adding-rewrite-rules-to-your-application

На шаге 3 я не упомянул, но мы не скопировали файл Elefant .htaccess по умолчанию в нашу общую папку. Вместо этого мы будем использовать тот, который предоставлен Zend в документации по PHPCloud. Создайте публичный файл / .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
...