繁体   English   中英

.htaccess RewriteRule 导致 403 Forbidden

[英].htaccess RewriteRule causing 403 Forbidden

我正在尝试在我的 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 禁止错误。 所有目录权限都设置为 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

以下网址不会:

  • 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

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

事实证明,我需要更改行:

Options FollowSymLinks

到:

Options +FollowSymLinks

不熟悉该框架,但看起来其他地方有一些行或者可能需要调整。

虽然我承认不是 mod 重写专家,但看起来第一行是将所有请求定向到 request_file.html,然后在第 2 行如果文件不存在,它会在第 3 行调用 boostrap.php。

您的问题可能出在 boostrap.php 中,查看该脚本中发生了什么以及如何处理请求。 调试器可能在该步骤中很有用。 尽管您可以使它起作用,但在我看来它可能不是最佳选择 例如,我相信通常有一个规则集可以避免将 havings.gif、.jpg.css 定向到您的路由脚本。 像这样:

RewriteCond $1 !^(favicon\.ico|favicon\.png|media|robots\.txt|crossdomain\.xml|css|js)

这避免了让 php 处理对这些类型文件的请求的开销。 对于稳健的应用程序生产使用,甚至还有更多的事情需要考虑,只需调整您的规则,以便一切都正确路由并且一切都应该没问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM