【问题标题】:installing cakephp 2.0.0 in a subdirectory在子目录中安装 cakephp 2.0.0
【发布时间】:2012-08-14 16:49:10
【问题描述】:

我发现了类似的问题here,但没有找到解决方案。基本上我已经在子目录'localhost/dyod'中安装了一个现有的 cakephp 应用程序。在不编辑 htaccess 文件的情况下,我收到一条错误消息,告诉我该应用程序正在寻找 dyod 控制器,因此似乎 uri 以某种方式关闭。当我向 htaccess 文件 (/dyod/) 添加 rewritebase 时,所有资产的 url 都关闭并且不包括 webroot。此外,它仍在寻找 dyod 控制器。我的 htaccess 文件是从 here 复制的。

提前致谢。

【问题讨论】:

    标签: php macos apache cakephp installation


    【解决方案1】:

    添加到这一点,因为它在我的谷歌搜索的顶部,这些答案没有帮助。

    CakePHP 使用了 3 个都需要修改的 .htaccess 文件。一个在顶级 CakePHP 目录中,一个在 app/ 中,一个在 app/webroot 中。将以下内容添加到每个:

    RewriteBase /path/to/dir/

    在我的机器上,我有以下结构: ~/网站/site1 ~/sites/site2/admin

    每个目录都有一个单独的 CakePHP 安装。

    在 site1 和 site2/admin 中安装 CakePHP。 这些网站的网址是:

    http://localhost/~me/site1
    http://localhost/~me/site2/admin
    

    我不断收到此错误: 在此服务器上找不到请求的 URL /home/me/Sites/site1/app/webroot/index.php。

    我修改了 3 个 .htaccess 文件来获取这些文件:

    site1 .htaccess:
    
    <IfModule mod_rewrite.c>
       RewriteEngine on
       RewriteBase /~me/site1/
       RewriteRule    ^$ app/webroot/    [L]
       RewriteRule    (.*) app/webroot/$1 [L]
    </IfModule>
    
    site1/app .htaccess:
    
    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteBase /~me/site1/app/
        RewriteRule    ^$    webroot/    [L]
        RewriteRule    (.*) webroot/$1    [L]
    </IfModule>
    
    site1/app/webroot .htaccess:
    
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteBase /~me/site1/app/webroot/
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^ index.php [L]
    </IfModule>
    

    就是这样。这三个变化就是你所需要的。

    【讨论】:

      【解决方案2】:

      在您的 .htaccess 文件中添加 RewriteBase 指令:

      RewriteBase /path/to/cake/app

      在你的情况下,这将是:

      RewriteBase /path/to/dyod

      【讨论】:

      • 如果我使用完整路径 /applications/mamp/htdocs/dyod/ 我在服务器上找不到错误(显然),如果我像我在 OP 中所说的那样使用 /dyod/ 则所有资产都有错误地址并仍然尝试加载 dyod 控制器。
      【解决方案3】:

      本页解释了如何在不同于“正常”位置的地方安装 CakePHP:

      http://book.cakephp.org/2.0/en/installation/advanced-installation.html

      基本上,您只需更改 webroot/index.php 文件中的 3 个值。您不必编辑任何 .htaccess 文件。我现在在每个站点的子目录中安装 CakePHP,而且我从来没有接触过 .htaccess 文件。只需更改 webroot/index.php 中的值即可。

      示例 - 我的目录结构:

      -cakephp
          -cakephp_2_2
          -cakephp_1_3
          -cakephp_2_1_beta
          - ...etc
      -public_html
          -mysite1
              -Config
              -Console
              -Controller
              -Lib
              - ...etc
              -View
              -webroot
          -mysite2
              -Config
              -Console
              -Controller
              -Lib
              - ...etc
              -View
              -webroot
      

      在我的网络根目录中:

      if (!defined('ROOT')) {
      define('ROOT', DS.'home'.DS.'myusername'.DS.'public_html');
      }
      
      
      if (!defined('APP_DIR')) {
      define('APP_DIR', 'mysite1');
      }
      
      
      define('CAKE_CORE_INCLUDE_PATH', DS.'home'.DS.'myusername'.DS.'cakephp'.DS.'cakephp_2_2'.DS.'lib');
      

      【讨论】:

      • 那么你的 ROOT、APP_DIR 和 CAKE_CORE_INCLUDE_PATH 会是什么?
      • 这些值似乎设置正确。您还有其他想法吗?
      • 更新了我的路径,例如
      • Daniel Wolf - 更改为匹配上面的示例文件夹结构,而不是我的内部结构。感谢您指出这一点。
      • 对不起,戴夫,如果它不是本地主机而是主机,而不是 DS.'home'.DS.'myusername'.DS.'public_html' 我应该使用什么?例如这是正确的mysite.com/public_html
      猜你喜欢
      • 2011-05-15
      • 2014-06-02
      • 1970-01-01
      • 2012-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2016-04-25
      相关资源
      最近更新 更多