【问题标题】:fixing cakephp .htaccess/mod_rewrite for shared hosting setups为共享主机设置修复 cakephp .htaccess/mod_rewrite
【发布时间】:2009-06-04 20:47:40
【问题描述】:

我正在尝试在共享主机设置上安装 cakePHP。将文件提取到 ~/public_html/dev/cake 之类的位置并访问相应的 URL(在本例中为 http://hostname/~username/dev/cake/)后,我收到 404 错误:


未找到

在此服务器上找不到请求的 URL /usr/home/username/public_html/dev/cake/app/webroot/。


我怀疑这是因为经过仔细检查,~/public_html 的绝对路径实际上并不是 /usr/home/username/public_html,而是 /usr/www/users/username/

这是我一直在尝试的(但显然它不起作用): (~/public_html/dev/cake/app/webroot/.htaccess)

<IfModule mod_rewrite.c>  
    RewriteEngine On  
    RewriteBase /usr/www/users/username/dev/cake/app/webroot/ 
    RewriteCond %{REQUEST_FILENAME} !-d  
    RewriteCond %{REQUEST_FILENAME} !-f  
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]  
</IfModule>  

不幸的是,这似乎并没有改变任何东西(404 消息保持不变)。想法?

【问题讨论】:

  • 需要注意的是,这是1.3的风格。对于 2.x,规则已经改变!现在是index.php?/$1(不再有 url= 部分),以防有人现在尝试在当前版本的 CakePHP 中使用它。

标签: php .htaccess mod-rewrite cakephp


【解决方案1】:

不应该

RewriteBase /usr/www/users/username/dev/cake/app/webroot/ 

RewriteBase /~username/dev/cake/

RewriteBase 关心将真实网址映射到虚拟网址,我认为这就是您想要的。

【讨论】:

  • 是的,RewriteBase 指的是逻辑/虚拟 URL,而不是文件系统位置
  • 你结束了我解决这个 .htaccess 问题的任务,谢谢。
【解决方案2】:

您正在修改错误的文件。您需要修改的 .htaccess 文件在 /dev 中,您不应该修改 /dev/cake/app/webroot/.htaccess 中的那个

【讨论】:

    【解决方案3】:

    我只想指出,我认为模块已加载,因为我看到了代码,但显然它没有启用!

    要在 SSH(终端)中启用它,请键入以下命令

    sudo a2enmod rewrite
    

    下面的命令显示所有处于活动状态的模块,如果它出现在列表中,那么你已经安装了它。

    apache2ctl -M
    

    确保使用...重新启动服务器

    service apache2 restart
    

    PhpCake 现在应该开始工作了。

    【讨论】:

      【解决方案4】:

      为什么不直接将文件解压到/usr/www/users/username/

      【讨论】:

      • 所以我环顾四周,我认为这就是文件实际所在的位置。如果我正确理解 Pair(我的主机),就会有一个 Home(/usr/home/username)和一个 Web 目录(/usr/www/users/username),它们符号链接到 /usr/home/username/public_html(又名~/public_html)。
      【解决方案5】:

      我认为 .htaccess 正在读取那个 '~' 并认为您正在引用您的主文件夹(这是 linux 中的快捷方式)。

      让您的应用程序运行的最快方法是转到 cake 的 config/core.php 并禁用重写(它告诉您取消注释某些内容并删除一些 .htaccess 文件)。另一种方法是编辑您的 .htaccess 并以某种方式告诉它 '~' 不是指主目录。也许一个简单的 \ 就可以了。

      【讨论】:

      • 禁用重写绝对有效,谢谢。我想我现在就这样运行。
      • 这可能不是问题所在:我的盒子 (localhost/~user/cake) 上也有类似的设置,它工作正常。尝试启用重写日志:httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritelog。如果您的主机没有禁用该指令,它可以帮助您了解问题所在。
      【解决方案6】:

      我在pair上托管,并且能够使重写规则起作用,但是,我在HTML->链接获取页面中所有链接的排序参数时遇到问题。相同的代码在我的本地计算机运行窗口上运行良好,但在对排序或查询参数过多(编辑或更新页面)时会导致问题。

      【讨论】:

        【解决方案7】:

        官方 CakePHP Cockbook 中的“高级安装”也有类似的问题。几个小时后,我设法让它工作了。

        操作系统:Mac OS X

        Cake 核心目录:/usr/lib/cake
        我的应用程序目录:/Users/myuser/dev/myapp
        我的应用程序 webroot 目录:/Users/myuser/Sites/myapp

        修改/Users/myuser/Sites/myapp/index.php

        if (!defined('ROOT')) {
            define('ROOT', DS.'Users'.DS.'myuser'.DS.'dev');
        }
        if (!defined('APP_DIR')) {
            define('APP_DIR', 'myapp');
        }
        if (!defined('CAKE_CORE_INCLUDE_PATH')) {
            define('CAKE_CORE_INCLUDE_PATH', DS.'usr'.DS.'lib');
        }
        

        修改/Users/myuser/Sites/myapp/.htaccess

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

        至于 /Users/myuser/dev/myapp/.htaccess - 此配置中不需要此文件,因此我将其删除。此配置最棘手的部分是在 Apache 中启用 mod_rewrite。在 Mac 上编辑 /private/etc/apache2/httpd.conf 似乎毫无意义(对于这个任务)。为每个用户创建额外的 Apache 配置文件。

        修改/private/etc/apache2/users/myuser.conf

        <Directory "/Users/myuser/Sites/">
            Options FollowSymLinks
            AllowOverride All
        </Directory>
        

        默认情况下,AllowOverride 设置为 None,因此 mod_rewrite 在此配置中不起作用。

        更改后 http://localhost/~myuser/myapp 可以正常工作。

        PS。 tmp 目录的快速权限修复。

        sudo chgrp -R www /Users/myuser/dev/myapp/tmp
        sudo chmod -R g+w /Users/myuser/dev/myapp/tmp
        

        【讨论】:

          【解决方案8】:

          是的,您必须在以下文件中提供 DOCUMENT_ROOT 路径。请参考您服务器的 phpinfo() 以获得正确的 DOCUMENT_ROOT 路径。它应该类似于var/www/html/

          1. .htaccess 在根 / 目录中(在 app,cake,vendors 目录之外)

            <IfModule mod_rewrite.c>
                RewriteEngine on
                RewriteRule    ^$ ) DOCUMENT_ROOT/app/webroot/    [L]
                RewriteRule    (.*) DOCUMENT_ROOT/app/webroot/$1 [L]
            </IfModule>
            
          2. .htaccess 在 /app 目录中

            <IfModule mod_rewrite.c>
                RewriteEngine on
                RewriteRule    ^$    DOCUMENT_ROOT/app/webroot/    [L]
                RewriteRule    (.*) DOCUMENT_ROOT/app/webroot/$1    [L]
            </IfModule>
            
          3. .htaccess 在 /app/webroot 目录中

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

          它对我有用。

          【讨论】:

          • 如何在godaddy中找到?
          猜你喜欢
          • 1970-01-01
          • 2010-11-24
          • 2012-06-30
          • 1970-01-01
          • 1970-01-01
          • 2015-03-09
          • 2023-03-31
          • 2011-12-05
          • 1970-01-01
          相关资源
          最近更新 更多