【问题标题】:CakePhp 2.0 .htaccessCakePhp 2.0 .htaccess
【发布时间】:2012-04-20 10:46:23
【问题描述】:

在 Apache 服务器上配置 CakePhp 时遇到问题。它在我的开发环境中运行良好,现在我正在寻找部署。

网址将如下所示:

"http://www.example.com/mysite/"

一个示例控制器操作是:

"http://www.example.com/mysite/users/login"

使用默认的 htaccess 文件似乎不起作用。

mod_rewrite是根据phpInfo加载的,它是重写url,但是它把/mysite/看成一个控制器。 这是输出和我的 .htaccess 文件

Missing Controller

Error: MysiteController could not be found.

Error: Create the class MysiteController below in file: >app/Controller/MysiteController.php

根:

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

应用程序:

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

网络根目录:

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

我应该更改我的 .htaccess 文件还是我的 CakePhp 配置文件?我尝试了几个不同的 RewriteBases,只是设法得到不同的错误。

编辑:服务器正在运行 php-cgi,并且似乎我的所有链接都被写入了 cgi-bin。例如:

$this->Html->meta('icon');

写入路径“/cgi-bin/cgiwrap/w3u_mysite/mysite/favicon.ico” 知道在哪里或为什么会发生这种情况吗?

【问题讨论】:

  • 完全使用域有什么问题? (没有 mysite 部分?)如果您打算将域用于多个应用程序,则始终可以使用子域。
  • 这是我的主机给我的网页空间,我不能使用整个域

标签: .htaccess cakephp mod-rewrite cakephp-2.0


【解决方案1】:

正如我在编辑中所怀疑的那样,问题与运行 cgi php 的服务器有关。我不确定是什么问题,但 CakePhp 谷歌小组提供了这个解决方案:

在 app/Config/core.php 中有一个 App.baseUrl 的注释定义。取消注释并替换为以下内容

Configure::write('App.baseUrl', '/mysite/');

在它上面,有 cmets 说要删除你应该忽略的 .htaccess 文件。该站点使用 .htaccess 文件作为其标准值运行良好,不需要 RewriteBase。一个烦恼是$this-&gt;Html-&gt;css()$this-&gt;Html-&gt;js() 函数不起作用,但我只在模板中调用它们,所以硬编码它们并不可怕。

如果有人了解这些 cgi 问题的原因,请分享。如果我不能使用所有的 Html 帮助器,它仍然感觉有点像一个 kludge。

【讨论】:

    【解决方案2】:

    您需要在 .htaccesses 中添加 Rewritebase /mysite/(可能带有 '/mysite' 引号或不带第二个斜杠,您必须尝试),因此 mod rewrite 将考虑该文件夹。


    您是否检查过webroot/index.php 文件的正确路径? 作为最后的手段,也许可以过滤掉路线中的“mysite”?


    最终建议:在你的重写规则中添加 mysite/app

    【讨论】:

    • 第一个建议的所有组合都不起作用,有些没有区别,有些则产生了内部服务器错误。我认为 index.php 配置正确,但它使用默认值。使用 phpInfo 的根路径进行自定义没有任何区别。我试图改变 CakePhp 中的路由,并得到了有趣的结果。我相信该域也在使用重写,因为我被重定向到另一个带有 CGI 错误的 URL。最终建议导致内部服务器错误。
    • 我的主机特别声明我的目录的 AllowOverride 没有设置为全部,而是一个指令。 RewriteBase 是否会因此而无法按预期工作?
    • 我这里有点建议...不过还有最后一个问题,当您使用 RewriteBase 时,您是否将它用于所有 .htaccess 文件?
    • 我尝试了两种方式。奇怪的是正确路由到controllers目录,但是css没有正确路由。
    【解决方案3】:

    我对某些服务器也有类似的问题。 我的解决方案是在所有 .htaccess 文件中命名绝对路径。

    类似:

    根:

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

    应用程序:

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

    webroot:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-13
      • 2010-11-23
      • 2011-05-04
      • 2014-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多