.htaccess 重写和 Ruby on Rails/Redmine 的问题

.htaccess 重写和 Ruby on Rails/Redmine 的问题

我安装了 Redmine,到目前为止一切运行顺利。

现在我想通过 .htaccess 添加重写规则,以便将请求从 domain.tdl 重定向到 www.domain.tdl。这种方法对我的日常 php 项目很有效:

RewriteEngine On
RewriteBase /

# redirect all pages w/o www to www.
RewriteCond %{HTTP_HOST} !^www\.domain\.tdl$
RewriteRule ^(.*)$ http://www.domain.tdl/$1 [L,R=301]

但是,当我将其添加到我们的 redmine/public/.htaccess 时,它似乎无限重定向(导致超时/http 500 错误)。

我尝试在论坛/谷歌上寻找解决方案,但我只发现数千个相互矛盾的意见:

  • ruby on rails 和 .htaccess 不能一起工作
  • ruby on rails 和 .htaccess 可以协同工作
  • 你必须编辑你的应用程序控制器
  • 你必须编辑你的 mongel 配置
  • 等等……

我是不是漏掉了什么?我不确定是否要编辑我的应用程序控制器,而且我非常确定我没有权限访问任何 mongrel 配置(托管服务器)。

答案1

这似乎很明显,但请仔细检查拼写错误。如果 RewriteCond 和 RewriteRule 的主机字符串不完全相同,那么您最终将面临无限重定向。由于您在此处使用了占位符,因此我们无法为您发现该问题。

在调试时使用 302 重定向是值得的。301 是可缓存的,普通 Web 浏览器会在您在服务器上更改 301 重定向后很长时间内继续使用它们收到的 301 重定向。curl 和 wget 等命令行工具不进行这种缓存。

您有反向代理吗?如果有,后端和前端的 Host: 标头可能不一样。

超时与 500 错误不同。重定向循环与它们都不同。尝试准确追踪响应是什么。使用类似的东西curl -s --include http://www.domain.tdl/ | grep "^HTTP"应该可以解决问题。

相关内容