我一直在运行cakephp应用程序
Www.lernzentry um.de/kundenservice
两年多了,一切都很顺利。现在,突然之间,没有任何改变,事情就出错了:任何登录都会导致错误:
“在控制器AppController中未定义操作webroot”
你可以自己在我的网站上试试。它看起来像是一个路由错误,所以我给出了我的.htaccess文件:
at /kundenservice/app/webroot/..htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>at /kundenservice/.htaccess:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
</IfModule>at /kundenservice/app/.htaccess:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ webroot/ [L]
RewriteRule (.*) webroot/$1 [L]
</IfModule>下面是error.log的一部分:
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}--这是应用程序在正常工作时抛出的异常!--以下是从蓝天中出现的神秘新错误:
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。任何帮助都将不胜感激。如果有人想通过电话给我支持(我的网站上有电话号码),我很乐意为此付费。
向你问好,威廉
发布于 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**:**下面添加以下行
// 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配置,但可能会发生相反的情况--根路径不工作,而其他的则起作用,所以这里需要更多的诡计.)
https://stackoverflow.com/questions/39317074
复制相似问题