我正在尝试在我的网络主机(Dreamhost)上安装Recess PHP framework。它包括以下.htaccess:
Options FollowSymLinks
RewriteEngine On
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ bootstrap.php [QSA,L]
这在我的机器上运行正常(Windows 7上的XAMPP 1.7.7),但在我的网络主机某些文件上导致403 Forbidden错误。所有目录权限都设置为755,所有文件权限都设置为644.PHP在拥有文件的同一用户下运行。
以下网址会产生403s:
以下网址不包含:
会导致这种情况发生的原因是什么?
答案 0 :(得分:10)
事实证明,我需要更改一行:
Options FollowSymLinks
为:
Options +FollowSymLinks
答案 1 :(得分:2)
不熟悉该框架,但看起来在其他地方有一些行或者可能需要调整。
虽然我承认自己不是mod重写专家,看起来第一行是将所有请求定向到request_file.html,然后第2行如果文件不存在则调用第3行的boostrap.php。
您的问题可能在于boostrap.php,请查看该脚本中发生的情况以及请求的处理方式。调试器在该步骤可能很有用。虽然你可以让它工作,但在我看来它可能不是最佳的。例如,我认为通常有一个规则集可以避免将.gif,.jpg .css指向您的路由脚本。像这样:
RewriteCond $1 !^(favicon\.ico|favicon\.png|media|robots\.txt|crossdomain\.xml|css|js)
这避免了让php处理对这些类型文件的请求的开销。对于强大的应用程序生产使用,甚至还需要考虑更多的事情,只需调整您的规则,以便一切正确,事情应该没问题。