Php Zend_控制器_路由器_重写

Php Zend_控制器_路由器_重写,php,zend-framework,Php,Zend Framework,我想用Zend\u Controller\u Router\u Rewrite为ndd.dev/interet/index/id/1/用Zend 1.12重写我的URLndd.dev/I/rouen/1/ 为此,我在引导程序中添加了: protected function _initRouter () { $config = new Zend_Config_Ini(APPLICATION_PATH.'/config/application.ini', APPLICATION_ENV);

我想用Zend\u Controller\u Router\u Rewrite为ndd.dev/interet/index/id/1/用Zend 1.12重写我的URLndd.dev/I/rouen/1/

为此,我在引导程序中添加了:

protected function _initRouter () {

    $config = new Zend_Config_Ini(APPLICATION_PATH.'/config/application.ini', APPLICATION_ENV);
    $router = new Zend_Controller_Router_Rewrite();
    $router->addConfig($config, 'routes');

}
在我的“application.ini”中:

routes.interet.type=“Zend\u Controller\u Router\u Route\u Regex”

routes.interet.route=“/i/(.+)/([0-9]+)/”

routes.interet.defaults.controller=“interet”

routes.interet.defaults.action=“index”

routes.interet.map.1=“seo”

routes.interet.map.2=“id”

routes.interet.reverse=“i/%s/%d/”

我的.htaccess:

重新启动发动机

RewriteCond%{REQUEST_FILENAME}-s[或]

RewriteCond%{REQUEST_FILENAME}-l[或]

RewriteCond%{REQUEST_FILENAME}-d

重写规则^.*$-[NC,L]

重写规则^.*$index.php[NC,L]

但是www.ndd.dev/i/rouen/1/返回:

Zend_控制器\u调度程序\u异常指定的控制器无效(i) 丹麦特使/www/library/Zend/Controller/Dispatcher/Standard.phpála ligne 248

我有没有放弃像addRoute这样的窒息


我已在引导中尝试过此方法:

    $router = Zend_Controller_Front::getInstance()->getRouter();

    $r = new Zend_Controller_Router_Route_Regex(
        "/i/([-\w]+)/(\d+)/",
        array('controller' => 'interet', 'action' => 'index'), 
        array(1 => 'seo', 2 => 'id'),
        'i/%s/%d/'
    );

    $router->addRoute('interet', $r);
    $router = Zend_Controller_Front::getInstance()->getRouter();

    $r = new Zend_Controller_Router_Route_Regex(
        "/i/([-\w]+)/(\d+)/",
        array('controller' => 'interet', 'action' => 'index'), 
        array(1 => 'seo', 2 => 'id'),
        'i/%s/%d/'
    );

    $router->addRoute('interet', $r);
同样的结果,他试图找到“我”控制者

*Zend_控制器\u调度程序\u异常指定的控制器无效(i)*


谢谢

通常,您的application.ini路由将符合该结构(您的路由不符合,除非您将其截断):

注意每一行如何以资源开始,第四个单词是路由的“名称”(在本例中是“登录”)


我不是100%确定,但我不认为您的引导
\u initRouter()
在这方面对您有帮助,我不记得在
应用程序.ini
中定义路由时需要它。也许可以评论一下,看看是否有帮助。

我已经在引导中尝试过这种方法:

    $router = Zend_Controller_Front::getInstance()->getRouter();

    $r = new Zend_Controller_Router_Route_Regex(
        "/i/([-\w]+)/(\d+)/",
        array('controller' => 'interet', 'action' => 'index'), 
        array(1 => 'seo', 2 => 'id'),
        'i/%s/%d/'
    );

    $router->addRoute('interet', $r);
    $router = Zend_Controller_Front::getInstance()->getRouter();

    $r = new Zend_Controller_Router_Route_Regex(
        "/i/([-\w]+)/(\d+)/",
        array('controller' => 'interet', 'action' => 'index'), 
        array(1 => 'seo', 2 => 'id'),
        'i/%s/%d/'
    );

    $router->addRoute('interet', $r);
同样的结果,他试图找到“我”控制者


*Zend_控制器\u调度程序\u异常指定的控制器无效(i)*

问题在于正则表达式:

"i/([-\w]+)/(\d+)"
而不是

"/i/([-\w]+)/(\d+)/"

嗯,没什么。。。他试图找到“我”控制者而不是使用路线。。。Zend_Controller_Dispatcher_Exception指定了无效控制器(i)您是否有另一条也称为“interet”的路由?问题是正则表达式:“i/([-\w]+)/(\d+”,而不是“/i/([-\w]+)/(\d+)/”是的,这通常很简单。