修复cakephp .htaccess / mod_rewrite用于共享主机设置

时间:2009-06-04 20:47:41

标签: php .htaccess mod-rewrite cakephp

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

<小时/> 找不到

在此服务器上找不到请求的网址/ 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消息保持不变)。想法?

8 个答案:

答案 0 :(得分:13)

应该不是

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

RewriteBase /~username/dev/cake/

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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

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

sudo a2enmod rewrite

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

apache2ctl -M

确保使用...

重新启动服务器
service apache2 restart

PhpCake现在应该开始工作了。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

让你的应用程序运行的最快方法是去蛋糕的config / core.php并禁用重写(它告诉你取消注释一些东西并删除一些.htaccess文件)。另一种方法是编辑你的.htaccess并以某种方式告诉它'〜'没有引用主目录。也许一个简单的\将工作。

答案 5 :(得分:1)

我正在托管对,我能够让重写规则工作但是,我遇到HTML-&gt;链接的问题,获取页面中所有链接的排序参数。相同的代码在我的本地计算机运行窗口上运行正常,但是对排序或查询参数太多(编辑或更新页面)会导致问题。

答案 6 :(得分:1)

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

    根目录 / 目录中的
  1. .htaccess(应用程序,蛋糕,供应商目录之外)

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

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

    <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>
    
  5. 它对我有用。

答案 7 :(得分:1)

我在官方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