.htaccess RewriteRule 导致 403 Forbidden

Posted

技术标签:

【中文标题】.htaccess RewriteRule 导致 403 Forbidden【英文标题】:.htaccess RewriteRule causing 403 Forbidden 【发布时间】:2012-04-21 13:06:24 【问题描述】:

我正在尝试在我的网络主机 (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 在拥有文件的同一用户下运行。

以下网址会导致 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

以下网址不会:

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

什么会导致这种情况发生?

【问题讨论】:

【参考方案1】:

事实证明,我需要换行:

Options FollowSymLinks

到:

Options +FollowSymLinks

【讨论】:

太棒了!我不会觉得这太容易了,你为我节省了很多时间。提前谢谢!【参考方案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 处理对这些类型文件的请求的开销。对于强大的应用程序生产使用,甚至需要考虑更多的事情,只需调整您的规则,以便一切都正确路由并且一切都应该没问题。

【讨论】:

以上是关于.htaccess RewriteRule 导致 403 Forbidden的主要内容,如果未能解决你的问题,请参考以下文章

。htaccess对RewriteRule的帮助

在 htaccess 中使用 rewriterule 的页面 slug

.htaccess 中的 RewriteRule 在 app.yaml 文件中转换为啥?

我的 .htaccess 中的 RewriteRule 命令不起作用

.htaccess - ErrorDocument 与 RewriteRule

.htaccess 重定向到 404 页面 RewriteRule