.htaccess的RewriteRule导致403 Forbidden错误

7

我正在尝试在我的Web主机(Dreamhost)上安装Recess PHP框架。它包括以下.htaccess文件:

Options FollowSymLinks
RewriteEngine On
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ bootstrap.php [QSA,L]

这个在我的机器上(Windows 7的XAMPP 1.7.7)完全正常,但是在我的一些Web主机上会导致403 Forbidden错误。所有目录权限都设置为755,所有文件权限都设置为644。PHP运行在拥有文件的相同用户下。

以下URL会产生403:

  • 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

以下URL不会:

  • 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个回答

9
事实证明,我需要更改这一行代码:
Options FollowSymLinks

to:

Options +FollowSymLinks

太好了!我不会觉得这太容易了,你帮我省了很多时间。提前谢谢你! - orafaelreis

2

我不熟悉那个框架,但看起来可能有其他地方出现了一些行或者需要进行调整。

尽管我承认我不是mod rewrite专家,但第一行似乎将所有请求指向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处理这些类型文件的请求,可以避免额外的开销。对于强大的应用程序生产使用,还有更多需要考虑的事情,只需调整规则,使一切正确路由即可,一切都会很好。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接