Snow Leopard 升级后禁止使用 Mod_rewrite(CakePHP 路由功能)

Snow Leopard 升级后禁止使用 Mod_rewrite(CakePHP 路由功能)

我正在使用 Apple 提供的标准 PHP 5.3 和 Apache 2 安装,在刚刚升级到 Mac OS X 10.6 (Snow Leopard) 的 Mac Pro 上进行 Web 开发。如果我​​忽略它破坏了我完成工作的能力这一事实,升级进行得还算顺利。;)

更新后,我开发的 CakePHP 应用程序在访问时开始出现 403 Forbidden 错误。根据日志文件中的错误,我确定 Apache 正在堵塞 Cake 的 .htaccess 文件中的 mod_rewrite 规则。以下是完整的文件:

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

规则本身没有错,但 Apache 完全禁止使用 mod_rewrite。机器上的其他所有页面都运行正常,如果我注释掉 .htaccess 文件,403 错误就会消失(当然,什么都不起作用)。

在我的 httpd.conf 文件中,我尝试更改以下内容:

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>

对此:

<Directory />
    Options FollowSymLinks
    AllowOverride All
    Order deny,allow
    Allow from all
</Directory>

...毫无效果。

我对 Apache 配置文件了解不多,对此我感到困惑。事实上,我了解得很少,以至于我不确定我的设置中需要哪些信息才能让人们提供有用的答案。我只是使用普通的 OS X 设置,没有什么特别的。

这次谷歌搜索没有给我带来任何结果,所以我向你求助。有什么想法吗?

答案1

您指向的文件的所有权/权限如何?我更倾向于认为 Apache 无法访问它们,而不是此时它是 Apache。

使用解决方案进行编辑:放在Options +FollowSymLinks上面RewriteEngine On

答案2

对我来说,将 FollowSymlinks 添加到 htaccess 不起作用,所以我在 Google 上搜索了一下,发现了另一种解决方案

事实证明,/etc/apache2/users/.conf 中有另一个目录块,您需要在其中将 FollowSymlinks 添加到 Options 并将 AllowOverride 更改为 All

<Directory "/Users/<your user>/Sites/">
    Options Indexes MultiViews FollowSymlinks
    AllowOverride all
    Order allow,deny
    Allow from all
</Directory>

重新启动 apache 和 htaccess 文件,重写条件现在应该可以工作了。

答案3

好的,这是我根据本页评论得出的解决方案:

配置:

  • Mac OS X 10.6.6
  • CakePHP 1.3.7

解决方案:Matthieu Sadouni 和 Jason Strack 的组合,因此:

改变/private/etc/apache2/users/{用户}.conf到:

<Directory "/Users/{user}/Sites/">
    Options Indexes MultiViews FollowSymlinks
    AllowOverride all
    Order allow,deny
    Allow from all
</Directory>

并将 Cake 根目录 .htaccess 文件更改为:

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteBase /~{user}/cake_1_3/
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]
</IfModule>

(其中 {user} 是您的用户名,cake_1_3 是您的蛋糕目录)

更新:是的,我是 Cake 新手,所以我从 15 分钟博客教程开始。我就是这样发现您还必须编辑其他 2 个 .htaccess 文件:

  • cake_1_3/应用程序/.htaccess
  • cake_1_3/应用程序/webroot/.htaccess

之后也在这里RewriteEngine on添加该行。RewriteBase /~{user}/cake_1_3/

答案4

我对此感到非常困扰。如果您使用的是 Leopard 或更高版本,那么 mod_rewrite 可能会出现问题。

当你的文件被放入http://localhost/~用户名/cake,您看不到样式。以下是修复该问题的方法。

首先,打开 httpd.conf。(我使用 nano。只要确保无论你使用什么都可以保存系统文件即可。)确保 mod_rewrite 组件前面没有哈希。然后向下滚动到该部分。将 AllowOverride None 设置为 AllowOverride All。(仅在 Snow Leopard 上)导航到 apache2/users/.conf。编辑此文件,使行显示为:Options Indexes MultiViews FollowSymLinks Allow Override All。现在,保存并重新启动 apache(sudo apachectl restart)。棘手的部分来了。如果你导航到你的网站,它应该会给你一个关于找不到目录的警告。现在,你必须编辑你的 .htaccess 文件。从你的主目录开始。在 RewriteEngine On 下,添加以下行“RewriteBase /~//”对根文件夹、应用程序文件夹和 webroot 文件夹执行此操作,确保将它们包含在每个 .htaccess 文件中。至关重要的是,你要确保添加结尾的正斜杠。这很重要。希望这能帮到你!祝你好运。上帝知道你会需要它。

相关内容