【问题标题】:CakePHP 404 on existing controller现有控制器上的 CakePHP 404
【发布时间】:2010-09-01 01:59:48
【问题描述】:

(我真的希望我在发布之前对谷歌和搜索栏进行了足够的尽职调查)

我开始使用 CakePHP,刚刚创建了我的第一个模型、控制器和视图。

当我浏览到 http://localhost/~me/MyApp/Lists 时,我得到一个 404,但我不知道为什么

这是我的控制器

<?php
    class ListsController extends AppController 
    {    
        var $name = 'Lists';

        function index()
        {
            $this->set('lists', $this->List->find('all'));
        }
    }
?>

我认为这是一个 .htaccess 问题,但是当我浏览到 http://localhost/~me/MyApp/apphttp://localhost/~me/MyApp/index 时,我得到一个“缺少控制器”错误页面。当然,这两个 URL 都会指向实际的文件或目录。

谁能告诉我为什么我的控制器会出现这个 404?

下面留下几个cmets的更新(见Leo的回答)

应用程序根目录的我的 .htacces

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]
</IfModule>

我的 CakePHP webroot 的 .htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>

【问题讨论】:

  • 丢失的控制器是否存在于 Missing Controller 消息中的确切位置和确切名称中?

标签: php cakephp http-status-code-404


【解决方案1】:

我认为问题出在 /~me/.尝试至少将您的项目移动到:http://localhost/MyApp

我记得我们很久以前就遇到过这样的问题。可以修复它,但可以肯定的是,您不会在生产服务器中使用这样的 url 离开网站,所以只需更改 url :)

【讨论】:

    【解决方案2】:

    查看app/webroot/index.php 并确保正确定义了根、应用和核心路径。

    要尝试的另一件事(尽管我怀疑这是您的问题)是将RewriteBase /~me 添加到您的所有 htaccess 文件中(您站点的根目录中有一个,app 目录中有一个,一个位于webroot 目录)。

    【讨论】:

      【解决方案3】:

      您的网址应为http://localhost/~me/MyApp/lists,其中“列表”小写。而 url http://localhost/~me/MyApp/apphttp://localhost/~me/MyApp/index 会让你丢失控制器页面,因为如果你使用 .htaccess,所有请求都将由 app/webroot/index.php 处理。

      【讨论】:

      • 试过了,我确实得到了 404s 超过 localhost/~me/MyApp
      • 我还应该注意,URL localhost/~me/MyApp/lists 转到 404,显示“在此服务器上找不到请求的 URL /Users/adam/Sites/Pluralist/app/webroot/lists”。 (注意“.../app/webroot/...”部分)。所以根目录 .htaccess 文件似乎正在工作
      【解决方案4】:

      在我看来,您的 mod_rewrite 无法正常工作。 创建一个仅包含以下内容的 phpinfo.php 文件:

      <?php echo phpinfo() ?>
      

      将它放在 webroot 中,然后以 http://localhost/~me/MyApp/phpinfo.php 访问它

      在浏览器中执行 ctrl-f 并搜索“rewrite”。如果不存在,则表示未设置。

      【讨论】:

      • 它列在“apache2handler”块的“加载模块”部分下。我假设虽然你说 mod_rewrite 应该在 phpinfo() 中有它自己的块,但它没有。
      • 如果它出现在 apache2handler 块中是正确的并已加载。它不应该出现在其他任何地方。您的 .htaccess 是什么样的? (网站根目录中的那个 - 即与应用文件夹相同的级别)
      • 我在上面添加了我的 .htaccess 文件。我对正则表达式很糟糕,但看起来根 .htaccess 将请求转发到“/app/webroot”,然后 webroot .htaccess 解析 url 并作为 url 参数转发到 index.php。注意:当我禁用我的 mod_rewrite 并访问 index.php?url=lists 应用程序工作正常。所以看起来我正在专门处理路由问题
      • 我认为这与 配置设置有关。我将 /Library/WebServer/Documents (OSX) 目录列表的 AllowOverrides 设置为 All 并将应用程序移到那里,它现在可以工作了。我不确定到底是什么让它工作,但我会玩,看看我是否可以 mod_rewrite 在我的用户站点文件夹中工作
      • 您的 .htaccess 文件看起来不错 - 它们是开箱即用的 CakePHP。关于 AllowOverrides 设置,您可能会发现此链接很有用,尽管我是为 Ubuntu 编写的:leoponton.blogspot.com/2010/05/… 很高兴知道您已经成功了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-29
      • 2018-07-22
      • 1970-01-01
      • 2013-08-19
      • 1970-01-01
      • 2011-11-29
      相关资源
      最近更新 更多