.htaccess RewriteRule导致403 Forbidden

时间:2012-04-09 03:03:37

标签: php apache .htaccess http-status-code-403 recess

我正在尝试在我的网络主机(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:

  • http://test.dd.moofz.com/
  • http://test.dd.moofz.com/recess-conf.php
  • http://test.dd.moofz.com/index.php
  • http://test.dd.moofz.com/bootstrap.php
  • http://test.dd.moofz.com/MIT-LICENSE

以下网址不包含:

  • http://test.dd.moofz.com/.gitignore
  • http://test.dd.moofz.com/httpd_logo_wide.gif
  • http://test.dd.moofz.com/README.textile
  • http://test.dd.moofz.com/the-book-of-recess.pdf

会导致这种情况发生的原因是什么?

2 个答案:

答案 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处理对这些类型文件的请求的开销。对于强大的应用程序生产使用,甚至还需要考虑更多的事情,只需调整您的规则,以便一切正确,事情应该没问题。