Zend custom Route не работает, если у контроллера индекса нет заглавных букв? - PullRequest
0 голосов
/ 19 октября 2011

Я тестирую проект Zend на своем общем хостинге. Я храню все в папке 'Zend-project', а не на сервере public-root (потому что у меня там другой проект!).

это структура:

/public_root
  /zend-project
    /application
      /configs
        application.ini
      /controllers
      /layouts
      /views
      bootstrap.php
    /css
    /images
    /javascript
    /zend-library
    .htaccess
    index.php

Мне пришлось немного подправить проект, потому что я просто не могу изменить свой document_root на общем хостинге, поэтому я отредактировал .htaccess так:

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

но, в конце концов, кажется, что все работает нормально, кроме одного URL-маршрута, который я добавил к маршрутизатору в моей начальной загрузке.

редактировать: я пытался создать новый контроллер 'TestController' .. с помощью одного действия (называемого 'тестом'), я пытался набрать URL с нижнего регистра контроллера (mysite.com/zend-project/test/ тест) и он работает! Как я и подозревал, что-то не так с самим словом «индекс»! потому что любой другой контроллер работает как символ

это bootstrap.php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

protected function _initRoutes()
{

    $frontController=Zend_Controller_Front::getInstance();
    $router=$frontController->getRouter();  
    $router->removeDefaultRoutes();
    $router->setGlobalParam('lang','en');
    $router->addRoute(
            'lang',
            new Zend_Controller_Router_Route(':lang/:controller/:action',
            array('lang'=>':lang',
            'module'=>'default',
            'controller'=>'index',
            'action'=>'index'

            )

            )
    );


            //the following route is not working remotely.
            //Is working on local environment
    $router->addRoute(
    'langController',
    new Zend_Controller_Router_Route(':controller/:action',
    array(

            'module'=>'default',
            'controller'=>'index',
            'action'=>'index'
            )

    )
);

            $router->addRoute(
    'langIndex',
    new Zend_Controller_Router_Route(':lang',
    array('lang'=>':lang',
            'module'=>'default',
            'controller'=>'index',
            'action'=>'index'
            )

    )
 );

            $router->addRoute(
    'langNothing',
    new Zend_Controller_Router_Route('',
    array(
            'module'=>'default',
            'controller'=>'index',
            'action'=>'index'
            )

    )
);

}
}

Я попытался набрать следующие URL-адреса (на основе созданных мной пользовательских маршрутов), и кажется, что работает everithing:

//this points to the pair controller/action -> index/index
mysite.com/zend-project/

//this points to the pair controller/action ->index/index in english lang
mysite.com/zend-project/en

//this points to the pair controller/action ->index/rooms in english lang
mysite.com/zend-project/en/index/rooms

Но всякий раз, когда я печатаю:

mysite.com/zend-project/index/index 

Я получаю следующее сообщение: Не найдено. Запрошенный URL / zend-project / index / index не найден на этом сервере.

Похоже, что запрос не достигает файла index.php .. Может быть, проблема .htaccess ?? или что

спасибо

изм

Выяснилось, что, набрав заглавную букву на контроллере сломанного маршрута, он работает:

//this works.Controller has capital letter
mysite.com/zend-project/Index/index 

//this do not work.Controller has not capital letter
mysite.com/zend-project/index/index

почему ?? (кстати я на linux сервере ..)

1 Ответ

0 голосов
/ 23 декабря 2011

Удалите это из httpd.conf

Options Includes ExecCGI MultiViews FollowSymLinks Indexes

...