2

在 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” 关于这可能发生在哪里或为什么会发生的任何想法?

4

3 回答 3

3

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

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

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

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

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

于 2012-04-20T02:46:23.920 回答
0

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


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


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

于 2012-04-13T06:23:11.783 回答
0

我对某些服务器也有类似的问题。我的解决方案是在所有 .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>

网络根:

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteRule ^(.*)$ /mysite/app/webroot/index.php?/$1 [QSA,L]
</IfModule>
于 2012-04-15T18:43:55.237 回答