cakephp 的 .htaccess

Posted

技术标签:

【中文标题】cakephp 的 .htaccess【英文标题】:.htaccess for cakephp 【发布时间】:2010-11-23 00:20:12 【问题描述】:

我正在尝试让 Cakephp 应用程序工作。为此,我设置了一个全新的 Debian 安装,更新了配置并将所有内容放在 /var/www 中,其中包含以下内容:

app
cake
.htaccess
index.php
vendors

.htaccess 文件包含以下内容:

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

如果我访问我的虚拟主机 (http://myhost/),我会看到正确的页面。但即使是用 src="/js/validate.js" 加载的 javascript 也会失败(它位于 /var/www/app/webroot/js/validate.js 内):

[Wed Aug 26 15:45:12 2009] [error] [client 10.7.10.52] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.
[Wed Aug 26 15:45:12 2009] [debug] core.c(3063): [client 10.7.10.52] r->uri = /webroot/webroot/webroot/webroot/webroot/webroot/webroot/webroot/webroot/webroot/js/prototype.js
[Wed Aug 26 15:45:12 2009] [debug] core.c(3069): [client 10.7.10.52] redirected from r->uri = /webroot/webroot/webroot/webroot/webroot/webroot/webroot/webroot/webroot/js/prototype.js
[Wed Aug 26 15:45:12 2009] [debug] core.c(3069): [client 10.7.10.52] redirected from r->uri = /webroot/webroot/webroot/webroot/webroot/webroot/webroot/webroot/js/prototype.js
[Wed Aug 26 15:45:12 2009] [debug] core.c(3069): [client 10.7.10.52] redirected from r->uri = /webroot/webroot/webroot/webroot/webroot/webroot/webroot/js/prototype.js
[Wed Aug 26 15:45:12 2009] [debug] core.c(3069): [client 10.7.10.52] redirected from r->uri = /webroot/webroot/webroot/webroot/webroot/webroot/js/prototype.js
[Wed Aug 26 15:45:12 2009] [debug] core.c(3069): [client 10.7.10.52] redirected from r->uri = /webroot/webroot/webroot/webroot/webroot/js/prototype.js
[Wed Aug 26 15:45:12 2009] [debug] core.c(3069): [client 10.7.10.52] redirected from r->uri = /webroot/webroot/webroot/webroot/js/prototype.js
[Wed Aug 26 15:45:12 2009] [debug] core.c(3069): [client 10.7.10.52] redirected from r->uri = /webroot/webroot/webroot/js/prototype.js
[Wed Aug 26 15:45:12 2009] [debug] core.c(3069): [client 10.7.10.52] redirected from r->uri = /webroot/webroot/js/prototype.js
[Wed Aug 26 15:45:12 2009] [debug] core.c(3069): [client 10.7.10.52] redirected from r->uri = /webroot/js/prototype.js
[Wed Aug 26 15:45:12 2009] [debug] core.c(3069): [client 10.7.10.52] redirected from r->uri = /js/prototype.js
[Wed Aug 26 15:45:12 2009] [debug] mod_deflate.c(632): [client 10.7.10.52] Zlib: Compressed 649 to 405 : URL /webroot/webroot/webroot/webroot/webroot/webroot/webroot/webroot/webroot/webroot/js/prototype.js

因此我的问题:CakePHP 所需的正确.htaccess 是什么?

非常感谢!

【问题讨论】:

您的 apache 配置中的站点根目录是哪个目录?它应该是 /var/www/app/webroot - 这可能会解决您的问题。 @inkedmn:谢谢,应该是 /var/www - 但错误是因为我只使用了一个 .htaccess,而不是 3,正如我刚刚发现的那样。谢谢! 【参考方案1】:

正确的.htaccess是默认的:

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

你必须在“/etc/apache2/sites-enabled/default”中添加这个:

<Directory /var/www>
  Options Indexes FollowSymLinks MultiViews
  AllowOverride All
  Order allow,deny
  allow from all
</Directory>

如果部分已存在,请将 AllowOverride None 更改为 AllowOverride All

【讨论】:

【参考方案2】:

答案是有 3 个不同的 .htaccess 文件:

/var/www/app/webroot/.htaccess

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

/var/www/app/.htaccess

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

/var/www/.htaccess

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

这是我的错,所有内容都列在 CakePHP site 上。谢谢大家!

【讨论】:

在找到我的日志文件并谷歌搜索您上面列出的错误后,我发现了这个!非常感谢! 如何在 cakephp3 中使用此方法,因为 cakephp 3 中没有 app 文件夹,请帮助我.. 图片未加载,链接未打开,但索引页面正在运行。请帮助@MrG【参考方案3】:

从主文件中删除 .htaccess 可能会解决这个问题。它对我有用(不需要从 webroot 中删除)

【讨论】:

【参考方案4】:

如果您的提供商允许,您可以将所有内容放入 httpd.conf 文件中,如下所示

<Directory /var/www>
  Options Indexes FollowSymLinks MultiViews
  AllowOverride All
  Order allow,deny
  allow from all
  <IfModule mod_rewrite.c>
      RewriteEngine on
      RewriteRule    ^$    webroot/    [L]
      RewriteRule    (.*) webroot/$1    [L]
  </IfModule>
</Directory>

对于其他目录等等...

【讨论】:

【参考方案5】:

CakePHP 在 webroot 目录中只有一个 .htaccess 文件。不需要更多 .htaccess 文件。您必须将app/webroot 设置为您的DOCUMENT_ROOT

【讨论】:

以上是关于cakephp 的 .htaccess的主要内容,如果未能解决你的问题,请参考以下文章

ORM如何在CakePHP3中运行

从 cakephp 3.x 迁移到 cakephp 4.x [关闭]

使用 Cakephp-jwt-auth [CakePHP 3] 过期后颁发新令牌

php [cakephp:mysqldump] mysqldumpのcakephp実装サンプル。#php #cakephp #mysql

php [cakephp:AuthComponent示例] AuthComponent的示例代码。 #cakephp

cakephp 多个数据库中的关联 Cakephp 2