【问题标题】:“Invalid controller specified” error in zend framework 1Zend 框架 1 中的“指定的控制器无效”错误
【发布时间】:2016-01-07 17:35:25
【问题描述】:

我有一个 Zend 框架项目,以前由其他程序员完成了一半。有了它,另一个应用程序直接桥接到Zend 的public/hrm 文件夹下的公共文件夹。

应用程序似乎运行正常。但在 apache 错误日志中,我不断发现这些错误。

  [Wed Dec 25 12:33:00 2013] [error] [client 127.0.0.1] 
  PHP Fatal error:  Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (hrm)' in /path/to/proj/library/Zend/Controller/Dispatcher/Standard.php:248\n
  Stack trace:
  \n#0 /path/to/proj/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
  \n#1 /path/to/proj/Application/Bootstrap.php(48): Zend_Controller_Front->dispatch()
  \n#2 /path/to/proj/public/index.php(30): Application_Bootstrap->run()
  \n#3 {main}
  \n  thrown in /path/to/proj/library/Zend/Controller/Dispatcher/Standard.php on line 248, referer: http://local.hrm.tld/hrm/lib/controllers/CentralController.php?reqcode=EMP&VIEW=MAIN&sortField=0&sortOrder0=ASC&VIEW=MAIN

  [Wed Dec 25 12:33:04 2013] [error] [client 127.0.0.1] 
  PHP Fatal error:  Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (hrm)' in /path/to/proj/library/Zend/Controller/Dispatcher/Standard.php:248\nStack trace:
  \n#0 /path/to/proj/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
  \n#1 /path/to/proj/Application/Bootstrap.php(48): Zend_Controller_Front->dispatch()
  \n#2 /path/to/proj/public/index.php(30): Application_Bootstrap->run()
  \n#3 {main}
  \n  thrown in /path/to/proj/library/Zend/Controller/Dispatcher/Standard.php on line 248, referer: http://local.hrm.tld/hrm/lib/controllers/CentralController.php?menu_no_top=hr&id=0008&capturemode=updatemode&reqcode=EMP&currentPage=1

public文件夹中.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]

我在这里错过了什么?

【问题讨论】:

    标签: php .htaccess zend-framework mod-rewrite url-rewriting


    【解决方案1】:

    你应该修改你的.htaccess,我认为有人试图访问hrm文件夹中不存在的一些文件,在这种情况下,请求被转发到你的应用程序,它试图找到hrm模块或控制器,因为它不存在,所以它会引发错误。

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

    这条规则:

    RewriteRule ^(hrm)($|/) - [L]
    

    不会重写 hrm 文件夹中的任何内容。

    或者在hrm/.htaccess里面放:

    RewriteEngine Off
    

    但我认为,您需要在那里进行一些重写,所以这可能不是选择!

    【讨论】:

    • 抱歉回复晚了。 public 下的 hrm 文件夹只是 Zend 主应用程序的一部分。您的额外规则仅允许 hrm。但是,之前有效的主要采埃孚路线失败了。
    • 如果没有实际看到结构,这有点难以理解。但我猜,如果失败,hrm 文件夹中没有.htaccess,如果我理解结构正确,应该有。
    • 该解决方案实际上并没有直接帮助。但我发现致命错误实际上是一些丢失的资产文件。否则,ZF 应用程序模块和人力资源应用程序都可以完美运行。我只是很好奇为什么会出现错误并且应用程序仍然可以正常运行。
    【解决方案2】:

    您可以在 application.ini 中添加以下行

    resources.frontController.baseUrl = "/hrm" 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-24
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多