首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在控制器AppController中未定义操作webroot。

在控制器AppController中未定义操作webroot。
EN

Stack Overflow用户
提问于 2016-09-04 12:48:28
回答 1查看 1.4K关注 0票数 2

我一直在运行cakephp应用程序

Www.lernzentry um.de/kundenservice

两年多了,一切都很顺利。现在,突然之间,没有任何改变,事情就出错了:任何登录都会导致错误:

“在控制器AppController中未定义操作webroot”

你可以自己在我的网站上试试。它看起来像是一个路由错误,所以我给出了我的.htaccess文件:

at /kundenservice/app/webroot/..htaccess:

代码语言:javascript
复制
<IfModule mod_rewrite.c>
     RewriteEngine On
     RewriteCond %{REQUEST_FILENAME} !-d
     RewriteCond %{REQUEST_FILENAME} !-f
     RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

at /kundenservice/.htaccess:

代码语言:javascript
复制
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule    ^$ app/webroot/    [L]
    RewriteRule    (.*) app/webroot/$1 [L]
</IfModule>

at /kundenservice/app/.htaccess:

代码语言:javascript
复制
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule    ^$    webroot/    [L]
    RewriteRule    (.*) webroot/$1    [L]
</IfModule>

下面是error.log的一部分:

代码语言:javascript
复制
2016-08-30 14:42:46 Error: [MethodNotAllowedException] Method Not Allowed
Request URL: /kundenservice/lessons/spenden/6674
Stack Trace:
#0 [internal function]: LessonsController->spenden('6674')
#1 /mnt/web4/c3/63/51573863/htdocs/kundenservice/lib/Cake/Controller/Controller.php(486): ReflectionMethod->invokeArgs(Object(LessonsController), Array)
#2 /mnt/web4/c3/63/51573863/htdocs/kundenservice/lib/Cake/Routing/Dispatcher.php(187): Controller->invokeAction(Object(CakeRequest))
#3 /mnt/web4/c3/63/51573863/htdocs/kundenservice/lib/Cake/Routing/Dispatcher.php(162): Dispatcher->_invoke(Object(LessonsController), Object(CakeRequest), Object(CakeResponse))
#4 /mnt/web4/c3/63/51573863/htdocs/kundenservice/app/webroot/index.php(109): Dispatcher->dispatch(Object(CakeRequest), Object(CakeResponse))
#5 {main}

--这是应用程序在正常工作时抛出的异常!--以下是从蓝天中出现的神秘新错误:

代码语言:javascript
复制
2016-08-31 19:20:25 Error: [MissingActionException]
Action AppController::webroot() could not be found.
Exception Attributes: array (
  'controller' => 'AppController',
  'action' => 'webroot',
)
Request URL: /kundenservice/app/webroot/service/cron
Stack Trace:
#0 /mnt/web4/c3/63/51573863/htdocs/kundenservice/lib/Cake/Routing/Dispatcher.php(187): Controller->invokeAction(Object(CakeRequest))
#1 /mnt/web4/c3/63/51573863/htdocs/kundenservice/lib/Cake/Routing/Dispatcher.php(162): Dispatcher->_invoke(Object(AppController), Object(CakeRequest), Object(CakeResponse))
#2 /mnt/web4/c3/63/51573863/htdocs/kundenservice/app/webroot/index.php(109): Dispatcher->dispatch(Object(CakeRequest), Object(CakeResponse))
#3 {main}

请求URL不应该包含/app/webroot。

服务器运行在一个Strato包上,所以我无法访问httpd.conf。任何帮助都将不胜感激。如果有人想通过电话给我支持(我的网站上有电话号码),我很乐意为此付费。

向你问好,威廉

EN

回答 1

Stack Overflow用户

发布于 2016-09-06 20:40:21

我有一个解决办法,但我知道这不是一个好的,“真实”的解决方案。

显然,这个问题的根源在于$_SERVER['REQUEST_URI']包含重定向形式的URL (例如,/kundenservice/app/webroot/users/forgot而不是/kundenservice/users/forgot)。不过,这种情况只发生在/以外的其他路由上--根页面可以工作。原因显然是/kundenservice/app/webroot/.htaccess中的/kundenservice/app/webroot/.htaccess导致了这种行为--只有当URL没有指向现有的文件或目录时,它才是活动的,而且由于/被定向到/index.php,并且该文件存在,所以在本例中不会出现问题。

在互联网上搜索时,我只发现有人提出相反的问题:我如何通过重写修改$_SERVER['REQUEST_URI']?-答案是,这是不应该做的,也是不可能的(除非您使用[P]或手动更改变量)。

这个问题似乎在一段时间前就已经开始了,可能是由于Strato在我的本地机器上更新了某种配置,在用XAMPP测试相同的场景时,一切都正常工作。

我找不到解决这个问题的办法。但是,我找到了解决CakePHP的具体问题的方法--即,在任何人看到app/webroot变量之前,我只是从相关的$_SERVER变量中删除了令人困惑的$_SERVER部分。

.../app/webroot/index.php**,中的直接在** <?php**:**下面添加以下行

代码语言:javascript
复制
// Workaround for weird .htaccess rewriting problem
// Whenever both the rule in /.htaccess and /app/webroot/.htaccess are active,
// for some reason the actual URLs sent to PHP are modified (they shouldn't be).
$_SERVER['REQUEST_URI'] = str_replace('/app/webroot/', '/', $_SERVER['REQUEST_URI']);
$_SERVER['SCRIPT_URI'] = str_replace('/app/webroot/', '/', $_SERVER['SCRIPT_URI']);
$_SERVER['SCRIPT_URL'] = str_replace('/app/webroot/', '/', $_SERVER['SCRIPT_URL']); 

如前所述,我知道这不是解决根本原因,这是一个丑陋的解决办法,但它目前起作用。

(另一种方法可能是在config/core.php中使用config/core.php配置,但可能会发生相反的情况--根路径不工作,而其他的则起作用,所以这里需要更多的诡计.)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39317074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档