我安装了 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"
应该可以解决问题。