Snow Leopard升级后禁止Mod_rewrite(CakePHP路由function)

我正在使用苹果公司提供的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> 

…没有效果

我对Apacheconfiguration文件了解不多,而且我很困惑。 事实上,我知道的很less,我不确定需要哪些关于我的设置的信息,以使人们能够提供有用的答案。 我只是使用香草OS X设置,没有什么奇特的。

谷歌search这次没有成果,所以我转向你。 有任何想法吗?

你指向的文件的所有权/权限如何? 我更倾向于认为Apache不能达到他们,而不是现在的Apache。

用解决scheme编辑:把Options +FollowSymLinks上面的RewriteEngine On

添加FollowSymlinks的htaccess没有为我工作,所以我GOOGLE了一下find了另一种解决scheme

原来在/etc/apache2/users/.conf中有另一个目录块,你需要在其中添加FollowSymlinks到选项,并将AllowOverride改为All

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

重新启动apache和htaccess文件,现在应该重写条件。

好的,这是我的解决scheme,从本页上的评论:

组态:

  • Mac OS X 10.6.6
  • CakePHP 1.3.7

解决scheme:Matthieu Sadouni和Jason Strack的组合,所以:

/private/etc/apache2/users/{user}.conf更改为:

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

并将Cake root .htaccess文件更改为:

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

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

更新 :是的,我是新来的蛋糕,所以我开始了15分钟的博客教程。 这就是我发现你必须编辑另外两个.htaccess文件:

  • cake_1_3 /应用程序/ htaccess的
  • cake_1_3 /应用程序/根目录/ htaccess的

RewriteEngine on之后, RewriteEngine on添加RewriteBase /~{user}/cake_1_3/这一行。

只是为了纪录,并回应@Matthie Sadouni

我正在使用Snow Leopard(OS X 10.6),我的{user} .conf文件的位置与他描述的不同。

“/private/etc/apache2/users/{user}.conf”

(用你的Mac用户名replace{user})

我有这个问题。 如果您使用的是Leopard或更高版本,则可能会遇到与mod_rewrite有关的问题。

当你的文件被放入http:// localhost /〜username / cake时 ,你看不到样式。 这是解决这个问题的方法。

首先,打开httpd.conf。 (我使用nano,只要确保你使用的任何东西都可以保存系统文件。)确保mod_rewrite组件前面没有散列。 然后向下滚动到该部分。 将AllowOverride None设置为AllowOverride All。 (仅限于雪豹)导航到apache2 / users / .conf。 编辑此文件,以便读取这些行:选项索引MultiViews FollowSymLinks允许全部覆盖。 现在,保存并重新启动apache(sudo apachectl restart)。 棘手的部分来了。 如果您导航到您的网站,它应该给你一个关于目录没有被发现的警告。 现在,你必须编辑你的.htaccess文件。 从你的主目录开始。 在RewriteEngine On下面,添加以下行“RewriteBase /〜//”为根文件夹,应用程序文件夹和webroot文件夹执行此操作,确保将其包含在每个.htaccess文件中。 最重要的是你要确保添加结束正斜杠。 这一点很重要。 我希望有帮助! 祝你好运。 G * d知道你会需要它。

如果在我的家庭网站目录中,我必须使用“RewriteBase /〜用户名//”,而当我把它放在我的主目录下的子文件夹中时,我必须使用“RewriteBase /〜username / cakePHP //”。