提问者:小点点

CakePHP2.0。htaccess


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

url将如下所示:

"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>

webroot:

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

我应该改变我的. htaccess文件,还是我的CakePhp配置文件?我已经尝试了一些不同的重写基础,只是设法得到不同的错误。

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

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

写入路径"/cgi-bin/cgipack/w3u_mysite/mysite/favicon.ico"有没有关于在哪里或为什么会发生这种情况的想法?


共3个答案

匿名用户

正如我在编辑中所怀疑的,问题与运行cgi php的服务器有关。我不确定问题出在哪里,但CakePhp谷歌集团提供了以下解决方案:

在app/Config/core中。php应用程序有一个注释掉的定义。baseUrl。取消注释并替换为以下内容

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

在它上面,有一些评论说删除你应该忽略的. htaccess文件。该网站与. htaccess文件作为其标准值运行良好,不需要重写数据库。唯一的烦恼是$this-

如果有人能洞察这些cgi灾难的原因,请分享。如果我不能使用所有的Html帮助程序,这仍然感觉有点像一个乱七八糟的东西。

匿名用户

您需要将Rewritebase/mysite/(可能引用“/mysite”或不使用第二个斜杠,您必须尝试)添加到您的。htaccess,因此mod rewrite将考虑该文件夹。

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

最后的建议:在重写文件中将mysite/添加到app

匿名用户

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