我正在使用苹果公司提供的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,从本页上的评论:
组态:
解决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文件:
在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 //”。